2010-07-28 109 views
0

我在.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”。所以我不理解这种行为。((

,我将不胜感激的任何建议。

回答

2

神奇的标志是in the docs: [QSA],将原有的查询字符串添加到您的网址。

标准匹配只在路径上完成,而不是在查询结束时,你可以在魔术变量%{QUERY_STRING}中找到)匹配这个变量可以在RewriteCond条件下完成,也可以将这个变量追加到结果url中,但QSA无限多userfriendely here。

2

试试这个...

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改变。

编辑:哦,我还通过使尾部斜线可选组合规则。