感谢您将您的代码添加到您的问题。我们再次看到这是多么重要:
您的问题是,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
样式文件中这样的规则。这些文件出了名的错误,很难调试,他们真的放慢了服务器。它们仅提供作为的情况下最后的选择,你没有对主机配置控制(读:真的很便宜的托管服务提供商),或者如果你有依赖于写自己的重写规则(这是一个明显的安全恶梦的应用)。
您必须在问题中内联发布您的代码。没有这些,我们将无法帮助你。那么,你所做的规则是什么“没有运气”尝试? – arkascha
我已经添加了我尝试使用的代码。 – yaniv14