我怎么会用一个重写改变:的.htaccess mod_rewrite的:重写查询字符串到路径
/标签= foo的
要:
/标签/ foo的
我尝试:
RewriteCond %{QUERY_STRING} ^tag=(.+)$
RewriteRule ^(.*)$ http://www.example.com/tag/$1 [L]
但它没有工作。
我怎么会用一个重写改变:的.htaccess mod_rewrite的:重写查询字符串到路径
/标签= foo的
要:
/标签/ foo的
我尝试:
RewriteCond %{QUERY_STRING} ^tag=(.+)$
RewriteRule ^(.*)$ http://www.example.com/tag/$1 [L]
但它没有工作。
为了避免递归,你应该检查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]
尝试以下方法:
RewriteCond %{QUERY_STRING} ^tag=(.+)$
RewriteRule ^(.*)$ http://www.example.com/tag/%1 [L]
通常,重写用于实现相反的效果。你确定你不想做以下事情吗?
RewriteRule ^tag/(.+)$ index.php?tag=$1 [L]
我试图从这样的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标志而不是问号。
Andrew Moore和Gumbo 谢谢,但非常感谢。 我试图解决超过一个星期没有成功。 Gumbo提出的解决方案解决了这个问题。 当遇到愿意帮助别人的人时,我确信我们可以拥有一个更美好的世界。 对不起,但我的英语知识非常有限。 我只想感谢。 Vera – Vera 2009-08-02 16:50:59