我怎样才能使用重写来改变:
/?tag = foo
要:
/标签/富
我试过了:
RewriteCond %{QUERY_STRING} ^tag=(.+)$
RewriteRule ^(.*)$ http://www.example.com/tag/$1 [L]
但它不起作用。
答案 0 :(得分:6)
尝试以下方法:
RewriteCond %{QUERY_STRING} ^tag=(.+)$
RewriteRule ^(.*)$ http://www.example.com/tag/%1 [L]
通常,重写用于实现相反的效果。你确定你真的不想做以下事吗?
RewriteRule ^tag/(.+)$ index.php?tag=$1 [L]
答案 1 :(得分: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]
答案 2 :(得分:0)
我试图从这样的网址转换:
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]
请注意,如果您使用的是2.4或更高版本的apache,则可以使用QSD标志而不是问号。