簡體   English   中英

.htaccess mod_rewrite 僅適用於 HTML,不適用於我的 PHP 文件

[英].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。

我幾乎嘗試了一切:

  • 更改了 /etc/apache2/apache2.conf
  • 更改了 /etc/apache2/sites-available/000-default.conf
  • 確保啟用了“a2enmod rewrite”

仍然,得到

未找到
在此服務器上找不到請求的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM