.htaccess问题 - URL重写
我在.htaccess中有URL重写问题。下面是.htaccess文件:.htaccess问题 - URL重写
RewriteEngine On
RewriteBase /community/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^view-all-results$ forums/index.php?view=view-all-results [R=302]
RewriteRule ^view-all-results/$ forums/index.php?view=view-all-results [R=302]
我需要重写URL,如 “/community/view-all-results?u=2
” 到 “community/forums/index.php?view=view-all-results&u=2
”。 但根据上述规则,我会得到“community/forums/index.php?view=view-all-results
”。
我试图重写规则更改为
RewriteRule ^view-all-results?(.*)$ forums/index.php?view=view-all-results&$1 [R=302]
但它不能正常工作。它仍将URL重写为“community/forums/index.php?view=view-all-results
”。
当我改变规则(放+而不是*):
RewriteRule ^view-all-results?(.+)$ forums/index.php?view=view-all-results&$1 [R=302]
我有网址,如 “community/forums/index.php?view=view-all-results&s
”。所以我不理解这种行为。((
,我将不胜感激的任何建议。
神奇的标志是in the docs: [QSA]
,将原有的查询字符串添加到您的网址。
标准匹配只在路径上完成,而不是在查询结束时,你可以在魔术变量%{QUERY_STRING}
中找到)匹配这个变量可以在RewriteCond
条件下完成,也可以将这个变量追加到结果url中,但QSA
无限多userfriendely here。
试试这个...
RewriteEngine On
RewriteBase /community/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^view-all-results/?$ forums/index.php?view=view-all-results [QSA]
基本上是一个重写规则的前半部分不匹配对QUERY_STRING,所以你第二个例子不会匹配反对。您的第一个代码缺失的主要原因是QSA标志,它告诉它通过它接收到的QUERY_STRING以及新创建的QUERY_STRING。我还删除了R = 302,因为我认为你不希望URL改变。
编辑:哦,我还通过使尾部斜线可选组合规则。