.htaccess重定向,带有唯一的URL和查询字符串

时间:2017-04-06 06:56:19

标签: apache .htaccess redirect

尝试重定向:

/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]

2 个答案:

答案 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")。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。