Apache301使用get参数重定向

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] 感谢

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

感谢您的帮助。

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

您的问题是,
重写规则
不在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 hosts
DOCUMENT\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 hosts
DOCUMENT\u ROOT
文件夹中



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

您必须在问题中内联发布代码。没有这些,我们就无法帮助你。那么你在“没有运气”的情况下尝试的规则是什么呢?我已经添加了我尝试使用的代码。你必须在问题中内联发布你的代码。没有这些,我们就无法帮助你。那么您“没有运气”尝试的规则是什么呢?我已经添加了我尝试使用的代码。我认为
[^ |和]cat=123[&|$]
应该是
(?:^ |和)cat=123(?:&&|$)
(或者
Apache>=2.4的QSD
标志)在目标的末尾丢失,以便实际删除原始查询字符串(Apache将在此处复制旧的)。@julp感谢您的提示!我认为
[^ |和]cat=123[&|$]
应该是
(?:^ |和)cat=123(?:&&|$)
(或者
QSD
标志对于Apache>=2.4)在目标的末尾丢失,以实际删除原始查询字符串(Apache将在此处复制旧的查询字符串)谢谢你的提示!