2009-08-02 141 views

回答

5

为了避免递归,你应该检查request line而不是作为%{QUERY_STRING}查询字符串可能已经被其他的规则改变:

RewriteCond %{THE_REQUEST} ^GET\ /\?(([^&\s]*&)*)tag=([^&\s]+)&?([^\s]*) 
RewriteRule ^(.*)$ /tag/%3?%1%4 [L,R=301] 

然后你可以重写请求返回内部没有冲突:

RewriteRule ^tag/(.*) index.php?tag=$1 [L] 
+3

Andrew Moore和Gumbo 谢谢,但非常感谢。 我试图解决超过一个星期没有成功。 Gumbo提出的解决方案解决了这个问题。 当遇到愿意帮助别人的人时,我确信我们可以拥有一个更美好的世界。 对不起,但我的英语知识非常有限。 我只想感谢。 Vera – Vera 2009-08-02 16:50:59

6

尝试以下方法:

RewriteCond %{QUERY_STRING} ^tag=(.+)$ 
RewriteRule ^(.*)$ http://www.example.com/tag/%1 [L] 

通常,重写用于实现相反的效果。你确定你不想做以下事情吗?

RewriteRule ^tag/(.+)$ index.php?tag=$1 [L] 
0

我试图从这样的URL转换:

http://java.scandilabs.com/faq?key=Contents_of__gitigno 

要这样的网址:

http://scandilabs.com/technology/knowledge/Contents_of__gitigno 

上面我曾与另外一个问号在最后放弃原来的查询字符串安德鲁的回答是:

RewriteCond %{HTTP_HOST} ^java 
RewriteCond %{QUERY_STRING} ^key=(.+)$  
RewriteRule ^(.*)$ http://scandilabs.com/technology/knowledge/%1? [R=301,L] 

注意,如果你在apache 2.4或更高版本上,你可以使用QSD标志而不是问号。

相关问题