.htaccess RewriteRule使2个URL可用于同一页面

时间:2013-03-03 14:55:44

标签: .htaccess rewrite

我一直在努力修复网站的网址结构。

我需要的是每个网址:

/main.php?mod=PageNameHere 

要重写,301重定向到:

/PageNameHere.html

我已经尝试过这个RewriteRule:

RewriteRule ^([^-]*)\.html$ /main.php?mod=$1 [L]

但它所做的就是让这两个网页上的页面都可用。我的导航仍然链接到main.php?mod = PageNameHere URL,所以我需要的是一种强制它重定向301的方法。

2 个答案:

答案 0 :(得分:0)

告诉apache Rewrite 301。否则它只是映射 url

RewriteRule ^([^-]*)\.html$ /main.php?mod=$1 [R=301,L]

答案 1 :(得分:0)

您需要有2个单独的重写规则:

  1. 内部转发/PageNameHere.html/main.php?mod=PageNameHere,与您已有的内容非常相似。
  2. 使用301将外部重定向/main.php?mod=PageNameHere添加到/PageNameHere.html,这是您目前没有的内容。
  3. 以下是适合您的代码:

    Options +FollowSymLinks -MultiViews
    # Turn mod_rewrite on
    RewriteEngine On
    RewriteBase /
    
    # 1. for internal forwarding
    RewriteRule ^([^.]*)\.html$ /main.php?mod=$1 [L,NC,QSA]
    
    # 2. for external redirection
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+main\.php\?mod=([^\s&]+) [NC]
    RewriteRule ^ /%1? [L,R=301]