1

我正在尝试使用 lightspeed webserver 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]

任何帮助将不胜感激。

4

1 回答 1

0

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

您的问题是 aRewriteRule不在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]

另一件不太清楚的事情是,如果您想要重写下面的所有 URL http://www.example.com/(所以在 path 之下/),或者只重写那个确切的 URL。如果您想保留请求的任何潜在的进一步路径组件并且仍然重写(例如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 文件夹中。


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

于 2017-01-22T20:10:32.687 回答