如何阻止 Apache 從 URL 路徑中查找文件名(不帶副檔名)
我的文件根目錄中有一個文件
update.php
。但我不想
/update
在我的 URL 中指向 update.php(因為我想/update
與我的 CMS 中的一個頁面關聯,Drupal 7)我知道 Apache
/update
在 Drupal 看到它之前正在“處理”:我在本地開發人員上創建了一個新的空文件夾 test.dev 將一個名為 orange.html 的文件放入其中,我的瀏覽器訪問了 test.dev/orange - 它顯示為橙色.html - 所以這是一個配置 Apache 的例子我的配置來自 puphpet.com Ubuntu12.04 PHP5.5 大多數設置預設提供
test.conf # ************************************ # Vhost template in module puppetlabs-apache # Managed by Puppet # ************************************ <VirtualHost *:80> ServerName test.dev ## Vhost docroot DocumentRoot "/var/www/test.dev" ## Directories, there should at least be a declaration for /var/www/test.dev <Directory "/var/www/test.dev"> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> ## Load additional static includes ## Logging ErrorLog "/var/log/apache2/test_error.log" ServerSignature Off CustomLog "/var/log/apache2/test_access.log" combined ## SetEnv/SetEnvIf for environment variables SetEnv APP_ENV dev ## Custom fragment </VirtualHost>
如何配置 Apache,以便 id 不會嘗試獲取名稱(無副檔名)與 URL 匹配的文件?我很樂意在特定情況下這樣做,因為
/update
我不想關閉目前配置,以防它破壞其他地方(回歸),如乾淨的 URL。我寧願為./update
我的設置:Ubuntu 12.04 LTS
apache2 -v Server version: Apache/2.4.9 (Ubuntu) Server built: Apr 1 2014 08:52:12
VM 是使用 puphpet 清單建構的:https ://github.com/therobyouknow/VagrantVMSetups/tree/20140721_puphpet_U1204_php55
根本原因在於 MultiViews 指令
http://httpd.apache.org/docs/2.4/mod/mod_negotiation.html#multiviews
如果伺服器收到對 /some/dir/foo 的請求並且 /some/dir/foo 不存在,則伺服器讀取目錄以查找所有名為 foo.* 的文件,並有效地偽造一個類型映射,其中命名所有這些文件,為它們分配相同的媒體類型和內容編碼,如果客戶端按名稱要求其中之一。然後它選擇最符合客戶要求的匹配項,並返回該文件。
在我網站的 conf 文件中,我
MultiViews
從下面刪除了<Directory "/var/www/test.dev/public_html"> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory>
並重新啟動 Apache
我發現我從 Drupal 顯示了“找不到頁面”頁面——這正是我想要的,因為這意味著 Apache 沒有截獲 URL。如果我在網站上沒有 Drupal,而只是平面 html,我會得到 404。(這裡 Drupal 不相關,這只是我自己的場景)。
所以解決方案可能是刪除 MultiViews 但我首先必須檢查是否有任何需要它的情況。什麼可能有助於使這種調整更加具體(因此風險較小的是使用
RemoveType
從 URL 中刪除匹配的 .php 文件:http ://httpd.apache.org/docs/trunk/mod/mod_mime.html#removetype )