【发布时间】:2013-07-04 05:46:58
【问题描述】:
我如何使用重写来改变:
/?tag=foo
收件人:
/tag/foo
我试过了:
RewriteCond %{QUERY_STRING} ^tag=(.+)$
RewriteRule ^(.*)$ http://www.example.com/tag/$1 [L]
但它不起作用。
【问题讨论】:
标签: .htaccess mod-rewrite
我如何使用重写来改变:
/?tag=foo
收件人:
/tag/foo
我试过了:
RewriteCond %{QUERY_STRING} ^tag=(.+)$
RewriteRule ^(.*)$ http://www.example.com/tag/$1 [L]
但它不起作用。
【问题讨论】:
标签: .htaccess mod-rewrite
尝试以下方法:
RewriteCond %{QUERY_STRING} ^tag=(.+)$
RewriteRule ^(.*)$ http://www.example.com/tag/%1 [L]
通常,使用重写来达到相反的效果。您确定您真的不想执行以下操作吗?
RewriteRule ^tag/(.+)$ index.php?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]
【讨论】:
我试图从这样的 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 标志而不是问号。
【讨论】: