2013-12-18 28 views
2

所以,我一直在像昨天一樣在htaccess上工作。我有我的htaccess文件中的兩個重寫語句。HTACCESS拼圖!爲什麼 」?」在一個重寫語句中工作,而不在另一箇中?見示例

RewriteRule ^.*wp-login\.php\?loggedout=true.*$ /not_found [R,L] 

上述說明適用。雖然

RewriteRule ^.*wp-login\.php\?action=login.*% /not_found [R,L] 

...不!

爲了使第二種情況起作用,我使用了以下語句。

RewriteCond %{QUERY_STRING} action=logout 

RewriteRule ^wp-login\.php$ /not_found/? [R,L] 

所以,不使用「?行動=登出」在第二種情況下,重寫規則似乎解決了問題。

是的,問題解決了,但我想明白爲什麼。這太令人費解了。

任何幫助表示讚賞。謝謝。

回答

2

您之前的規則不正確,因爲QUERY_STRING無法在RewriteRule中匹配。 RewriteRule只匹配沒有查詢字符串的請求uri。

所以正確的規則是:

RewriteCond %{QUERY_STRING} (^|&)action=logout(&|$) 
RewriteRule ^wp-login\.php$ /not_found/? [R,L] 

OR這包括查詢參數:

RewriteCond %{QUERY_STRING} (^|&)action=(login|logout)(&|$) 
RewriteRule ^wp-login\.php$ /not_found/? [R,L] 
+0

之前閱讀你的答案,我已經取得了巨大的誤會真的是什麼QUERY_STRING。非常感謝。你能否也請解釋一下(^ |&)是什麼? – DavidH

+0

'(^ |&)'表示查詢參數要麼在開始或者在&後的同一個事物後面,這意味着查詢參數後面跟着'&'OR行尾 – anubhava

+0

, 哇!我不再是htaccess的初學者。 LOL感謝你Anubhava。你是最好的!我很高興在StackOverflow上有像你這樣的人。當我的知識基礎足夠大時,我也會貢獻自己的力量。再次感謝。 – DavidH

相關問題