簡體   English   中英

.htaccess mod_rewrite循環

[英].htaccess mod_rewrite loop

我正在努力實現一些mod_rewrite .htaccess規則來創建干凈的URL。 具體來說,當用戶提交帶有GET請求的表單時,我正在嘗試確保通過301清除URL(當前使用302進行測試以避免緩存)。

我遇到的問題是我的規則正在創建一個無限循環。

重定向用戶的get請求的規則(以避免用戶在瀏覽器中看到?query1 =&query2 =):

RewriteCond %{QUERY_STRING} ^query1=(.*)&query2=(.*)$ [NC]
RewriteRule ^results.php$ /results/%1/%2? [R=302,NC,L]

但是,我還有一個規則可以進一步格式化訪問/ results /轉發到results.php的任何人(例如從“返回結果”鏈接):

RewriteRule results/(.*)/(.*)$ results.php?query1=$1&query2=$2 [NC,L]

完整的.htaccess文件:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{QUERY_STRING} ^query1=(.*)&query2=(.*)$ [NC]
    RewriteRule ^results.php$ /results/%1/%2? [R=302,NC,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule results/(.*)/(.*)$ results.php?query1=$1&query2=$2 [NC,L]
</IfModule>

有關如何解決此問題的任何建議?

謝謝!

重寫引擎循環,因此當引擎循環時,重寫為查詢字符串的最后一條規則會被第一條規則捕獲。 您需要匹配%{THE_REQUEST}變量,而不是匹配%{QUERY_STRING}變量,以便它不受其他重寫的影響:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{THE_REQUEST} /results\.php\?query1=([^&]+)&query2=([^&\ ]+) [NC]
    RewriteRule ^results.php$ /results/%1/%2? [R=302,NC,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule results/(.*)/(.*)$ results.php?query1=$1&query2=$2 [NC,L]
</IfModule>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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