簡體   English   中英

htaccess 3 參數重寫規則

[英]htaccess 3 parameters rewrite rule

我知道以前有人問過這個問題,但我什么也沒找到

我嘗試在 htaccess 中傳遞 3 個變量 url 更改正常,但我無法獲得第三個變量

這是我的 htaccess 文件

RewriteEngine On

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

RewriteRule ^([a-z]+)\/?$ index.php?r=$1 [NC]
RewriteRule ^([a-z]+)/([a-z]+) index.php?r=$1&s=$2 [L]
RewriteRule ^([a-z]+)/([0-9]+) index.php?r=$1&id=$2 [L]
RewriteRule ^([a-z]+)/([0-9]+)/([a-z]+) index.php?r=$1&id=$2&s=$3 [L]
RewriteRule ^([az]+)/([0-9]+) index.php?r=$1&id=$2 [L] RewriteRule ^([az]+)/([0-9]+)/([az]+) index.php?r=$1&id=$2&s=$3 [L]

這 2 條規則是沖突的。 /abc/123/def形式的 URL 也與第一條規則匹配,因此永遠不會處理第二條規則。

您可以:

  • 在第一個規則模式中包含一個字符串結尾錨 ( $ ),以便它只匹配/abc/123而不是/abc/123/def 例如:

     RewriteRule ^([az]+)/([0-9]+)$ index.php?r=$1&id=$2 [L]
  • 或者,顛倒這兩個指令,因此 3 個參數的規則優先:

     RewriteRule ^([az]+)/([0-9]+)/([az]+) index.php?r=$1&id=$2&s=$3 [L] RewriteRule ^([az]+)/([0-9]+) index.php?r=$1&id=$2 [L]

您可能應該在所有模式中包含字符串結束錨點,否則它們可能會匹配太多。 例如。 /abc/123/def/for/bar/baz.jpg由第 3 條和第 4 條規則匹配,沒有字符串結束錨點。 如果您添加字符串結尾的錨點,那么文件系統條件可能會被完全刪除。

正如@IMSoP 在評論中指出的那樣,這兩個條件(即RewriteCond指令)僅適用於隨后的第一個RewriteRule 無論如何,第一條規則不太可能匹配真實文件,因此條件目前並沒有真正做任何事情。

暫無
暫無

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

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