SEO友好的URL而不是查询字符串.htaccess

时间:2015-07-02 09:10:58

标签: php .htaccess url-rewriting seo clean-urls

如何修改.htaccess文件并获取SEO友好URL而不是查询字符串。我想实现这3个目标:

  1. localhost / example / products / 而不是 的本地主机/示例/产品-list.php的
  2. localhost / example / products / 38 / 而不是 的本地主机/示例/ products.php?ID = 38
  3. localhost / example / products / 38 / red / 而不是 的本地主机/示例/ products.php ID = 38&安培;颜色=红色
  4. 在另一篇文章中@anubhava给了我很多帮助,这就是我现在对第二点的看法:

    RewriteEngine on
    RewriteBase /example
    # external redirect from actual URL to pretty one
    RewriteCond %{THE_REQUEST} /products(?:\.php)?\?id=([^\s&]+) [NC]
    RewriteRule ^ products/%1? [R=302,L,NE]
    # internal forward from pretty URL to actual one
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^products/([^/]+)/?$ products.php?id=$1 [L,QSA]
    

    第二点可以正常运作,但我想知道在之前或之后我必须在哪里放置其他规则。我把它放在另一条规则之后,但它没有用,因为它重定向到上一个url localhost / example / products / 38 /

    # external redirect from actual URL to pretty one
    RewriteCond %{THE_REQUEST} /products(?:\.php)?\?id=([^\s&]+)\?color=([^\s&]+) [NC]
    RewriteRule ^ products/%1/%2? [R=302,L,NE]
    # internal forward from pretty URL to actual one
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^products/([^/]+)/([^/]+)/?$ products.php?id=$1&color=$2 [L,QSA]
    

1 个答案:

答案 0 :(得分:6)

您需要2个参数的新规则集:

RewriteEngine on
RewriteBase /example/

# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} /products(?:\.php)?\?id=([^\s&]+)&color=([^\s&]+) [NC]
RewriteRule ^ products/%1/%2/? [R=302,L,NE]

RewriteCond %{THE_REQUEST} /products(?:\.php)?\?id=([^\s&]+)\s [NC]
RewriteRule ^ products/%1/? [R=302,L,NE]

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

# internal forward from pretty URL to actual one
RewriteRule ^products/([^/]+)/?$ products.php?id=$1 [NC,L,QSA]

RewriteRule ^products/([^/]+)/([^/]+)/?$ products.php?id=$1&color=$2 [NC,L,QSA]

RewriteRule ^products/?$ products-list.php [L,NC]