2016-05-04 30 views
1

匹配問號我在我的.htaccess以下的正則表達式如何在.htaccess

RewriteRule ^([a-z]+)/([a-z]+)/\?(.+)$ ./default.php?controller=$1&action=$2&$3 

林預計,如果我提供一個網址像mysite.com/controller/action/?v=2它會轉化爲mysite.com/default.php?controller=controller&action=action&v=1

然而,不工作。我試着做

RewriteRule ^([a-z]+)/([a-z]+)/[?](.+)$ ./default.php?controller=$1&action=$2&$3 

RewriteRule ^([a-z]+)/([a-z]+)/[\?](.+)$ ./default.php?controller=$1&action=$2&$3 

無工作。然後我嘗試更換? (問號)通過X

RewriteRule ^([a-z]+)/([a-z]+)/x(.+)$ ./default.php?controller=$1&action=$2&$3 

,並試圖傳遞一個URL像mysite.com/controller/action/xv=2

按預期只是工作。我試着測試我的正則表達式,它似乎沒問題。我在做什麼錯?

回答

1

查詢字符串不直接在RewriteRule中解釋,但是,您可以輕鬆地將其附加到末尾。

試試這個:

RewriteRule ^([a-z]+)/([a-z]+)/$ ./default.php?controller=$1&action=$2&%{QUERY_STRING} 
3

在規則本身中未檢測到查詢字符串。作爲參考,這些需要用檢查QUERY_STRING的值的單獨條件來檢查。

但是,您實際上不需要在您的情況下這樣做,因爲您只需要使用QSA(查詢字符串追加)標誌將v=1查詢參數追加到新的URI。

RewriteRule ^([^/]+)/([^/]+)/$ default.php?controller=$1&action=$2 [QSA,L] 

現在,請求/mycontroller/myaction/?v=1時,Apache將服務default.php?controller=mycontroller&action=myaction&v=1

如果您希望使最後的斜線可選,請在其後面添加一個問號(^([^/]+)/([^/]+)/?$)。

僅供參考,[^/]+表示「一個或多個不是正斜槓的字符」。