尝试重定向:
/category/unique-name?foo=123&bar=&abc=
为:
http://www.example.com/new/page
我读过的大多数文章都暗示要为多个页面重定向查询字符串模式。我只是在需要重定向的一页之后。
我最近的尝试是这样的:
RewriteEngine On RewriteCond %{REQUEST_URI} ^/category/unique-name/$ RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$ RewriteRule ^(.*) $ http://www.example.com/new/page? [R=301,L]
任何帮助都非常感谢!
更新07/04/2017
感谢所有建议。我已经尝试过所有这些,有些导致了错误500,有些没有效果。我列出了以下哪些......
#NO CHANGE
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/category/unique-name$
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$
RewriteRule ^ http://www.example.com/new/page [R=301,L]
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/category/unique-name$
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$
RewriteRule ^ http://www.example.com/new/page [R=301,L]
#ERROR 500
RewriteEngine On
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$
RewriteRule ^/?category/unique-name/?$ $ http://www.example.com/new/page? [R=301,L]
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/category/unique-name/?$
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$
RewriteRule ^ $ http://www.example.com/new/page [R=301,END,QSD]
RewriteEngine On
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$
RewriteRule ^/?category/unique-name/?$ $ http://www.example.com/new/page [R=301,END,QSD]
答案 0 :(得分:1)
尝试这样,
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/category/unique-name$
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$
RewriteRule ^ http://www.example.com/new/page [R=301,L]
答案 1 :(得分:0)
你的尝试接近完美。尝试使用这两个稍微修改过的替代品之一:
方法1(旧):
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/category/unique-name/?$
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$
RewriteRule ^ $ http://www.example.com/new/page? [R=301,L]
方法2(旧):
RewriteEngine On
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$
RewriteRule ^/?category/unique-name/?$ $ http://www.example.com/new/page? [R=301,L]
如果你操作一个不太过时的apache http服务器版本,你可以实现一个稍微清晰的最终URL:
方法1(新):
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/category/unique-name/?$
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$
RewriteRule ^ $ http://www.example.com/new/page [R=301,END,QSD]
方法2(新):
RewriteEngine On
RewriteCond %{QUERY_STRING} ^foo=123&bar=&abc=$
RewriteRule ^/?category/unique-name/?$ $ http://www.example.com/new/page [R=301,END,QSD]
如果这些导致http状态500(内部服务器错误),那么很可能你的http服务器版本太旧了,你必须坚持前两种方法中显示的工作。
然而,考虑到您实现外部重定向(R=301
)的事实,我想知道这是否会起作用并实际实现您要实现的目标......
您自己的尝试(以及上面的修改版本)使用干净URL外部的那些get参数重写传入请求。因此,他们更改了浏览器中可见的URL。哪个非常好,但是:您的设置是否真的能够处理下一个/new/page
的传入请求?
一般提示:您应该始终更喜欢将此类规则放在http服务器主机配置中,而不是使用动态配置文件(" .htaccess")。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。