鑑於下面的條件和規則,mod_rewrite如何驗證請求是文件還是目錄?mod_rewrite如何驗證請求是文件還是目錄?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
我的理解是,如果請求不是一個文件和不是一個目錄,然後處理它有模式不是一個問號任何字符,替代作爲與後臺查詢字符串重寫規則參考$1
是不是每個請求一個文件或目錄例如index.php,style.css,媒體等?如果滿足條件是
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
其內容是,如果該請求是一個文件或一個目錄,然後處理重寫規則
謝謝馬修。所以讓我明白你在說什麼。以'http:\\ example.com \ blah.php'爲例,用'RewriteCond%{REQUEST_FILENAME}的條件和規則!-f RewriteCond%{REQUEST_FILENAME}!-d RewriteRule ^([^?] * )index.php?_route _ = $ 1 [L,QSA]',如果存在'blah.php',則表示使用'blah.php'。如果它不存在,那麼將用戶重定向到'index.php'。是對的嗎? – PeanutsMonkey
正確,儘管技術上第一部分僅僅是默認行爲,但規則集僅明確地說明了第二部分。 – matthew
對不起,不完全按照第一部分和第二部分的意思嗎?除此之外,我嘗試了規則,它似乎並沒有加載任何CSS文件,JavaScript文件等,除非我做了'RewriteCond%{REQUEST_FILENAME} -f RewriteCond%{REQUEST_FILENAME} -d RewriteRule ^([^?] *)'。這是爲什麼? – PeanutsMonkey