[英]mod_rewrite rule to prevent query string
好吧,我正在測試我的個人網絡服務器上安裝的cms(joomla),然后再投入使用。 而且我希望能夠阻止查詢字符串的使用,或者更多的是防止用戶在查詢字符串上輸入內容(更改像articleid等),但仍允許內部重定向使用查詢字符串。
示例阻止某人作為網址進入
http://www.doamin.com/index.php?option=com_user&view=register
顯示錯誤頁面或重定向到index.php沒有查詢字符串
但仍然允許重寫規則
RewriteRule ^注冊$ index.php?option = com_user&view = register
RewriteCond%{QUERY_STRING}!^ $
RewriteRule ^ index.php $ index.php? [R = 301]顯然重定向所有查詢字符串(但它也重定向/注冊,這不是我想要的)
寄存器重寫結束時的[L]標志也不會使規則處理停止。
編輯:結束了丹尼爾的推動回答這個問題。 見下面的答案
如果要刪除現有查詢字符串,請僅使用問號結束替換字符串。
雖然在這句話中沒有提到,但重寫規則不得使用QSA
標志。
至於仍然允許重寫規則:
RewriteRule ^Register$ index.php?option=com_user&view=register
您可能希望它出現在重寫規則下面以去除查詢字符串。 匹配時, %{ENV:REDIRECT_STATUS}
變量設置為200,mod_rewrite再次運行重寫規則。 如果未使用%{ENV:REDIRECT_STATUS}
不是200的檢查,則剝離查詢字符串的重寫規則將匹配此第二遍。
這會將index.php
所有請求(帶或不帶查詢字符串)映射到沒有查詢字符串的index.php
,但仍然允許/Register
被視為/index.php?option=com_user&view=register
:
RewriteCond %{ENV:REDIRECT_STATUS} !=200
RewriteRule ^index.php$ index.php?
RewriteRule ^Register$ index.php?option=com_user&view=register
或者,如果您希望在index.php
請求具有查詢字符串時重定向到錯誤頁面:
RewriteCond %{ENV:REDIRECT_STATUS} !=200
RewriteCond %{QUERY_STRING} !=""
RewriteRule ^index.php$ error.php? [R,L]
RewriteRule ^Register$ index.php?option=com_user&view=register
但我只想使用F
標志:
RewriteCond %{ENV:REDIRECT_STATUS} !=200
RewriteCond %{QUERY_STRING} !=""
RewriteRule ^index.php$ - [F,L]
RewriteRule ^Register$ index.php?option=com_user&view=register
好吧,雖然Daniels的回答沒有完全奏效,但它讓我開始走上正軌。
最終需要兩個部分來做我想要的,其中一部分是使用REDIRECT_STATUS變量
首先需要
RewriteCond %{QUERY_STRING} !=""<br>
RewriteCond %{ENV:REDIRECT_STATUS} 200<Br>
RewriteRule .* - [L]<br>
.....
我所有的內部重定向
喜歡: RewriteRule ^Register$ index.php?option=com_register&view=register [L]
.....
最后
RewriteRule .* - [F,L]
使它成為唯一能夠使用的東西是內部重定向定義的URL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.