首页 文章

.htaccess重写冲突规则

提问于
浏览
0

我遇到了一些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

about_us是旧链接,about-us是正确的链接 . 如果htaccess重定向到example.com/about-us,那么其他SEO友好重写规则将选择它并显示页面但是eh extra?ref =参数令人困惑 . 我猜这两个规则在某种程度上是冲突的,但有没有办法让两个规则一起工作,例如没有额外的重定向?ref =参数?我对htaccess的了解至少是基本的,所以我对这个问题有点困惑 .

提前致谢

1 回答

  • 0

    RedirectRedirectMatch 是mod_alias的一部分,而重写规则是mod_rewrite的一部分 . 您遇到的问题是当您混合使用这两个模块时, both 模块会影响同一个请求,因此当您只想要一个请求时会发生两件事 . 在这种情况下,您需要坚持使用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]
    

    请注意,重定向的规则来自 before 路由到index.php的规则 .

相关问题