使用get参数重定向Apache 301

时间:2017-01-22 19:41:39

标签: apache redirect mod-rewrite lightspeed

我正在尝试使用lightspeed webserver htaccess进行301重定向而没有运气。

我需要在不使用任何相关参数的情况下进行网址重定向。

例如:

来自:http://www.example.com/?cat=123

至:http://www.example.com/some_url

我试过了:

RewriteRule http://www.example.com/?cat=123 http://www.example.com/some_url/ [R=301,L,NC]

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

感谢您将代码添加到您的问题中。我们再一次看到它的重要性:

您的问题是RewriteEngine on RewriteRule ^/?$ /some_url/ [R=301,L,NC,QSD] 对网址进行操作,但在路径上进行操作。所以你需要这样的东西:

RewriteEngine on
RewriteCond %{QUERY_STRING} (?:^|&)cat=123(?:&|$)
RewriteRule ^/?$ /some_url/ [R=301,L,NC,QSD]

根据您的问题,不清楚是否要忽略任何GET参数,或者如果您只想设置某些参数时需要重定向。因此,只有在请求中实际设置了某个参数时才会应用此变体:

http://www.example.com/

另一件事情并未真正明确的是,您是否希望重写/以下的所有网址(因此低于路径http://www.example.com/foo => http://www.example.com/some_url/foo),或仅重写该网址。如果要保留请求的任何可能的其他路径组件并仍然重写(例如RewriteEngine on RewriteRule ^/?(.*)$ /some_url/$1 [R=301,L,NC,QSD] ),则需要在正则表达式中添加捕获并重用捕获的路径组件:

.htaccess

要使其中任何一个工作,您需要通过AllowOverride命令启用-htaccess样式文件的解释。有关详细信息,请参阅重写模块的官方文档。您必须注意,http服务器进程实际上可以读取DOCUMENT_ROOT样式文件,并且它位于本地文件系统中的http hosts .htaccess文件夹中。

一般提示:您应该始终更喜欢将此类规则放在http服务器主机配置中,而不是使用{{1}}样式文件。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。