2017-01-22 141 views
0

我想做一个301重定向与光速web服务器htaccess没有运气。Apache 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] 

任何帮助将不胜感激。

+0

您必须在问题中内联发布您的代码。没有这些,我们将无法帮助你。那么,你所做的规则是什么“没有运气”尝试? – arkascha

+0

我已经添加了我尝试使用的代码。 – yaniv14

回答

0

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

您的问题是,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样式文件中这样的规则。这些文件出了名的错误,很难调试,他们真的放慢了服务器。它们仅提供作为的情况下最后的选择,你没有对主机配置控制(读:真的很便宜的托管服务提供商),或者如果你有依赖于写自己的重写规则(这是一个明显的安全恶梦的应用)。

+0

我认为'[^ |&] cat = 123 [&| $]'应该是'(?:^ |&)cat = 123(?:&| $)'和'?'(或'QSD'标志为Apache> = 2.4)在目的地末端丢失以实际删除原始查询字符串(Apache将在此复制旧的查询字符串)。 – julp

+0

@julp感谢提示! – arkascha