[英].htaccess mod_rewrite working ONLY with HTML, not with my PHP files
我剛剛在本地主機上完成了我的第一個應用程序的設置 - .htaccess 工作得非常好。 我剛剛將文件上傳到谷歌雲 LAMP 服務器,設置數據庫並讓一切正常工作——但是,由於某種原因,PHP 文件沒有找到(?)這很奇怪,因為它在本地主機上工作得很好,HTML 文件似乎也被重寫得很好:這是 apache 中的錯誤日志:
Negotiation: discovered file(s) matching request: /var/www/html/index (None could be negotiated).
這是我的.htaccess
:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html [NC,L]
奇怪的是它重寫 HTML 沒有問題但是 PHP 文件會拋出這個:
未找到
在此服務器上找不到請求的 URL。
我幾乎嘗試了一切:
仍然,得到
未找到
在此服務器上找不到請求的 URL。
如果看起來好像啟用了MultiViews
,但.php
文件不是允許的擴展名。 需要禁用MultiViews
才能成功處理您的 mod_rewrite 規則。 要禁用 MultiViews,請將以下內容添加到.htaccess
文件的頂部:
Options -MultiViews
MultiViews 默認情況下是禁用的,但是,它在某些發行版上明確啟用(在服務器配置中)。
在旁邊:
RewriteEngine On RewriteCond %{REQUEST_FILENAME}.-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1,php [NC.L] RewriteCond %{REQUEST_FILENAME}.html -f RewriteRule ^(.*)$ $1,html [NC,L]
檢查請求不 map 到目錄的第一個條件是完全多余的。
檢查相應的.php
(或.html
)文件是否存在的條件不一定檢查您正在重寫的同一“文件”。 例如,如果您請求/foo/bar
並且foo.php
碰巧存在,那么您將得到一個重寫循環(500 內部服務器錯誤)。 要解決這個問題,應該改寫如下:
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule (.*) $1.php [L]
NC
標志是多余的, RewriteRule
模式周圍的錨點也是多余的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.