Apache301使用get参数重定向
我正在尝试使用lightspeed webserver htaccess执行301重定向,但运气不好 我需要做一个url到url重定向没有任何相关参数 例如: 发件人:Apache301使用get参数重定向,apache,redirect,mod-rewrite,lightspeed,Apache,Redirect,Mod Rewrite,Lightspeed,我正在尝试使用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] 感谢
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]
感谢您的帮助。感谢您在问题中添加代码。我们再次看到这是多么重要: 您的问题是,
重写规则
不在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/
(因此在路径/
)下方)进行重写,或者仅重写该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
样式文件的解释。有关详细信息,请参阅重写模块的官方文档。您必须注意,http服务器进程实际上可以读取-htaccess
样式的文件,并且它位于本地文件系统的http hostsDOCUMENT\u ROOT
文件夹中
还有一个一般提示:您应该始终希望将这些规则放在http服务器主机配置中,而不是使用
.htaccess
样式的文件。这些文件是出了名的容易出错,难以调试,而且它们确实降低了服务器的速度。只有在您无法控制主机配置的情况下(阅读:非常便宜的主机服务提供商),或者如果您的应用程序依赖于编写自己的重写规则(这是一个明显的安全噩梦),才提供它们作为最后一个选项。感谢您将代码添加到您的问题中。我们再次看到这是多么重要:
您的问题是,重写规则
不在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/
(因此在路径/
)下方)进行重写,或者仅重写该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
样式文件的解释。有关详细信息,请参阅重写模块的官方文档。您必须注意,http服务器进程实际上可以读取-htaccess
样式的文件,并且它位于本地文件系统的http hostsDOCUMENT\u ROOT
文件夹中
还有一个一般提示:您应该始终希望将这些规则放在http服务器主机配置中,而不是使用
.htaccess
样式的文件。这些文件是出了名的容易出错,难以调试,而且它们确实降低了服务器的速度。只有在您无法控制主机配置的情况下(阅读:非常便宜的主机服务提供商),或者如果您的应用程序依赖于编写自己的重写规则(这显然是一个安全噩梦),才提供它们作为最后一个选项。您必须在问题中内联发布代码。没有这些,我们就无法帮助你。那么你在“没有运气”的情况下尝试的规则是什么呢?我已经添加了我尝试使用的代码。你必须在问题中内联发布你的代码。没有这些,我们就无法帮助你。那么您“没有运气”尝试的规则是什么呢?我已经添加了我尝试使用的代码。我认为[^ |和]cat=123[&|$]
应该是(?:^ |和)cat=123(?:&&|$)
(或者Apache>=2.4的QSD
标志)在目标的末尾丢失,以便实际删除原始查询字符串(Apache将在此处复制旧的)。@julp感谢您的提示!我认为[^ |和]cat=123[&|$]
应该是(?:^ |和)cat=123(?:&&|$)
(或者QSD
标志对于Apache>=2.4)在目标的末尾丢失,以实际删除原始查询字符串(Apache将在此处复制旧的查询字符串)谢谢你的提示!