Mod-Rewrite
如何編寫 RewriteRule 以匹配不存在的文件?
如何編寫一個
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>
部分。