簡體   English   中英

mod_rewrite規則以防止查詢字符串

[英]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]標志也不會使規則處理停止。

編輯:結束了丹尼爾的推動回答這個問題。 見下面的答案

mod_rewrite文檔說:

如果要刪除現有查詢字符串,請僅使用問號結束替換字符串。

雖然在這句話中沒有提到,但重寫規則不得使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM