.htaccess重写冲突规则

.htaccess重写冲突规则,.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,我对一些htaccess规则有一个问题,我认为这些规则很简单。我有一些很好的SEO友好的URL重写,如下所示 RewriteEngine On RewriteCond %{REQUEST_URI} !^(index\.php|/images|/templates|/views|/ajax|/uploads|/robots\.txt|/sitemap\.xml|/favicon\.ico|/scripts|/cron|/combine.php|/js|/css) RewriteRule ^(.*)

我对一些htaccess规则有一个问题,我认为这些规则很简单。我有一些很好的SEO友好的URL重写,如下所示

RewriteEngine On
RewriteCond %{REQUEST_URI} !^(index\.php|/images|/templates|/views|/ajax|/uploads|/robots\.txt|/sitemap\.xml|/favicon\.ico|/scripts|/cron|/combine.php|/js|/css)
RewriteRule ^(.*)$ index.php?ref=$1&%{QUERY_STRING} [L]
这一切都很好,我想保留这个。我还希望将Google WMT报告为404的一些旧页面重写为新的等效页面,为此我想使用:

Redirect 301 /about_us http://example.com/about-us
我遇到的问题是浏览器指向的URL是:

http://example.com/about-us?ref=about_us
“关于我们”是旧链接,“关于我们”是正确链接。如果htaccess重定向到example.com/about-us,那么另一个SEO友好的重写规则将拾取它并显示页面,但是eh-extra?ref=参数会混淆它。我猜这两个规则在某种程度上是相互冲突的,但是有没有办法让这两个规则一起工作,例如在没有额外?ref=参数的情况下重定向?至少可以说,我对htaccess的了解是基本的,所以我对这一点有点执着

提前感谢

重定向和重定向匹配是mod_alias的一部分,而重写规则是mod_rewrite的一部分。您遇到的问题是,当您混合使用这两个模块时,两个模块都会影响相同的请求,因此,当您只需要一个模块时,会发生两件事情。在这种情况下,您需要坚持使用mod_rewrite,并使用以下方法:

RewriteEngine On

RewriteRule ^about_us /about-us [L,R=301]

RewriteCond %{REQUEST_URI} !^(index\.php|/images|/templates|/views|/ajax|/uploads|/robots\.txt|/sitemap\.xml|/favicon\.ico|/scripts|/cron|/combine.php|/js|/css)
RewriteRule ^(.*)$ index.php?ref=$1&%{QUERY_STRING} [L]

请注意,重定向规则位于路由到index.php的规则之前。

您是否检查了apache日志?也许可以尝试重写规则^\/about\uhttp://example.com/about-us [L,R=301,NC]为什么您使用&%{QUERY\u STRING}而不是[QSA]?@MikeAnthony我之所以使用它,是因为示例代码就是这么说的:我的htaccess知识有限,无法从各地获取样本。我所拥有的和[QSA]之间的根本区别是什么?非常感谢。我猜是有冲突,但我不知道发生了什么。