.htaccess重定向包含动态细分的网址

时间:2014-04-10 17:53:05

标签: apache .htaccess mod-rewrite redirect http-status-code-301

我正在开设一个电话号码查找网站,并将它们存储到mysql数据库中。该网站有一个三页深入查找方法来查找电话号码。所以顺序的过程是:

  1. phone-number/areacode.php?a=aaa
  2. phone-number/prefix.php?a=aaa&b=bbb
  3. phone-number/number.php?a=aaa&b=bbb&c=cccc
  4. areacode.php只显示系统中所有区号的列表。 prefix.php只显示所有区号的列表以及系统中的相对前缀。

    目前(出于搜索引擎优化目的)我们将这三个页面重写为以下内容(按上述顺序排列):

    1. phone-number/aaa
    2. phone-number/aaa/bbb
    3. phone-number/aaa/bbb/cccc
    4. 我不知道为什么之前的开发人员使用斜杠但是再次出于搜索引擎优化的目的,我们希望在执行301重定向时将slashes更改为dashes。最终结果如下:

      1. phone-number/aaa
      2. phone-number/aaa-bbb
      3. phone-number/aaa-bbb-cccc
      4. 以下是.htaccess

        中使用的当前代码
        RewriteCond %{HTTP_HOST} ^example\.com
        RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
        
        RewriteRule phone-number/([0-9]{3})/([0-9]{3})/([0-9]{4}) /phone-number/number.php?a=$1&b=$2&c=$3
        RewriteRule phone-number/([0-9]{3})/([0-9]{3}) /phone-number/prefix.php?a=$1&b=$2
        RewriteRule phone-number/([0-9]{3}) /phone-number/areacode.php?a=$1
        

        我不知道从哪里开始301重定向这些动态网址。

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

# convert / to -
RewriteRule ^(phone-number)/([0-9]{3})/([0-9]{3})/([0-9]{4})/?$ /$1/$2-$3-$4 [L,R=301]
RewriteRule ^(phone-number)/([0-9]{3})/([0-9]{3})/?$ /$1/$2-$3 [L,R=301]

# rewrite to php handler
RewriteRule ^phone-number/([0-9]{3})-([0-9]{3})-([0-9]{4})/?$ /phone-number/number.php?a=$1&b=$2&c=$3 [L,QSA]
RewriteRule ^phone-number/([0-9]{3})-([0-9]{3})/?$ /phone-number/prefix.php?a=$1&b=$2 [L,QSA]
RewriteRule ^phone-number/([0-9]{3})/?$ /phone-number/areacode.php?a=$1 [L,QSA]