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