.htaccess mod_rewrite:将查询字符串重写为路径

Ver*_*era 3 .htaccess mod-rewrite

我怎么能用改写来改变:

/?标签= FOO

至:

/标签/富

我试过了:

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

但它没有用.

And*_*ore 6

请尝试以下方法:

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

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

RewriteRule ^tag/(.+)$ index.php?tag=$1 [L]
Run Code Online (Sandbox Code Playgroud)


Gum*_*mbo 5

为了避免递归,您应该检查请求行,因为查询字符串%{QUERY_STRING}可能已被其他规则更改:

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

然后,您可以在内部重写该请求而不会发生冲突:

RewriteRule ^tag/(.*) index.php?tag=$1 [L]
Run Code Online (Sandbox Code Playgroud)

  • Andrew Moore和Gumbo谢谢你,但非常感谢你.我试图解决一个多星期没有成功的问题.Gumbo提出的解决方案解决了这个问题.当遇到愿意帮助别人的人时,我确信我们可以拥有一个更美好的世界.抱歉错误,但我的英语知识非常有限.我只想感谢.维拉 (3认同)