感谢您将代码添加到您的问题中。我们再一次看到这是多么重要:
您的问题是 aRewriteRule
不在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/
(所以在 path 之下/
),或者只重写那个确切的 URL。如果您想保留请求的任何潜在的进一步路径组件并且仍然重写(例如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 文件夹中。
和一个一般提示:您应该始终喜欢将此类规则放在 http 服务器主机配置中,而不是使用.htaccess
样式文件。众所周知,这些文件容易出错,难以调试,而且它们确实会降低服务器的速度。它们仅在您无法控制主机配置的情况下(阅读:非常便宜的托管服务提供商)或如果您的应用程序依赖于编写自己的重写规则(这是一个明显的安全噩梦)提供它们作为最后一个选项)。