Mod-Rewrite

如何編寫 RewriteRule 以匹配不存在的文件?

  • December 22, 2016

如何編寫一個RewriteRule首先檢查請求的文件是否存在,如果不存在,則重定向到根頁面:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule "^/(.*)" "/" [L]

例如 http://example.com/not_existing_file 應該重定向到http://example.com.

然而,這不起作用。這裡有什麼問題?

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule "^/(.*)" "/" [L]

您的條件,檢查請求映射到現有文件,似乎是正確的。但是,您RewriteRule不會重定向,而是在內部重寫請求。它似乎還會觸發重寫循環(500 錯誤)?

請嘗試以下操作:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/. / [R=302,L]

此處需要該R標誌才能觸發外部重定向。這只會重定向/<something>,而不是/<anything>像您的原始程式碼中那樣。

一旦您確定一切正常,將302(臨時)重定向更改為(永久) - 如果這是必需的。301使測試更容易,因為 301 否則會被瀏覽器硬記憶體。

這也假設這是在主伺服器配置中,而不是.htaccess<Directory>部分。

引用自:https://serverfault.com/questions/822165