我有以下行:爲什麼在.htaccess中這個正則表達式不匹配?
RewriteRule ^page.php?var1=([0-9]+)&var2=(.*)&var3=(.*)$ index.php?module=page&var1=$1
當我訪問這個URL目錄:page.php文件VAR1 = 24 & VAR2 = 346adf & VAR3 = ASDF
它沒有做的正則表達式。任何人有線索?
我有以下行:爲什麼在.htaccess中這個正則表達式不匹配?
RewriteRule ^page.php?var1=([0-9]+)&var2=(.*)&var3=(.*)$ index.php?module=page&var1=$1
當我訪問這個URL目錄:page.php文件VAR1 = 24 & VAR2 = 346adf & VAR3 = ASDF
它沒有做的正則表達式。任何人有線索?
基本上你的規則是不正確的。原因:您只能使用RewriteRule
與REQUEST_URI匹配,但無法在此匹配QUERY字符串。
你的代碼改成這樣做是否正確:
RewriteCond %{QUERY_STRING} ^var1=([0-9]+)&var2=[^&]*&var3=.*$ [NC]
RewriteRule ^page\.php/?$ index.php?module=page&var1=%1 [L,NC,QSA]
我注意到的第一件事是,應該可能會逃脫。
而且缺少逃逸,查詢字符串(?
後的東西)是不是RewriteRule
匹配的一部分。 如果要匹配查詢字符串,則必須使用其他RewriteCond
。 例如:
RewriteCond %{QUERY_STRING} ^foo=([^&]+)&bar$
RewriteRule ^page\.php$ otherpage.php?x=%1 [QSA]
我不會推薦這個壽。你最好在腳本中解析查詢字符串。
請參閱http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond – Qtax 2012-04-05 16:11:55
非常感謝! – dirk 2012-04-05 16:13:03
如果^ page \ .php /?$是^ page \ .php \?$ – 2012-04-05 16:17:33