我正在使用mod_rewrite對每個與現有文件或目錄不匹配的請求進行重寫。這是我的配置:如果路徑上存在文件,Apache不會重寫請求
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [NC,L]
這是用來像/abc/foo
或/abc/foo/10
到我的應用程序URL映射。它工作得很好。
爲了提高性能,我的應用程序現在存儲調用的結果/abc/foo
在文件foo
在相應的目錄/abc
- 這樣在第一次調用後改寫條件就不再適用(文件不存在)和apache直接提供數據而不必先調用應用程序。工作得很好。
問題是:現在請求/abc/foo/10
不再導致URL被重寫,而是出現錯誤「404 File Not Found」。日誌條目指出重寫條件!-f
不再爲真,但實際上文件/abc/foo/10
確實存在而不是。 /abc/foo
存在,但是一個文件,而不是一個目錄。
我該如何得到這個工作?
(多視圖被禁用)
讓我得到這個正確的,所以當你提出要求'/ ABC /富/ 10',你想要的數據也下/ ABC下FOO被寫入到文件夾一個名爲10的文件?這是你在第二次電話中所期待的嗎? –
不,問題是如果文件'/ abc/foo'存在,調用'/ abc/foo/10'不再匹配'RewriteCond%{REQUEST_FILENAME}!-f'。 – Niko
爲什麼不先把'RewriteCond%{REQUEST_FILENAME}!-d'放入'RewriteCond%{REQUEST_FILENAME}!-f'中,然後看到結果,並且重寫規則^(。*)$而不是^。 * $並直接指向index.php而不是/index.php –