Apache 301使用get参数重定向



我正试图用光速Web服务器htaccess进行301重定向,但没有成功。

我需要在没有任何相关参数的情况下进行url到url的重定向。

例如:

来自: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]

任何帮助都将不胜感激。

感谢您在问题中添加代码。我们再一次看到这是多么重要:

您的问题是RewriteRule不是在URL上操作,而是在路径上操作。所以你需要这样的东西:

RewriteEngine on
RewriteRule ^/?$ /some_url/ [R=301,L,NC,QSD]

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

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

另一件不太清楚的事情是,您是否希望重写http://www.example.com/以下(路径/以下)的所有URL,或者只重写那个确切的URL。如果您想保留请求的任何潜在的进一步路径组件并仍然重写(例如http://www.example.com/foo => http://www.example.com/some_url/foo),那么您需要在正则表达式中添加一个捕获并重用捕获的路径组件:

RewriteEngine on
RewriteRule ^/?(.*)$ /some_url/$1 [R=301,L,NC,QSD]

要使这两种方法都起作用,您需要通过AllowOverride命令启用对.htaccess样式文件的解释。有关详细信息,请参阅重写模块的官方文档。您必须注意,-htaccess样式的文件实际上是http服务器进程可读的,并且它位于本地文件系统中http主机DOCUMENT_ROOT文件夹的正内部。


还有一个一般提示:您应该始终倾向于将此类规则放置在http服务器主机配置中,而不是使用.htaccess样式的文件。众所周知,这些文件容易出错,很难调试,而且它们确实会降低服务器的速度。它们只是在您无法控制主机配置的情况下(阅读:非常便宜的托管服务提供商),或者您的应用程序依赖于编写自己的重写规则(这显然是一场安全噩梦)的最后一个选项。

相关内容

  • 没有找到相关文章

最新更新