代码之家  ›  专栏  ›  技术社区  ›  MM PP

在htaccess中重定向带有问号和其他参数的URL

  •  1
  • MM PP  · 技术社区  · 8 年前

    /category-name/post-name.html?id=1234
    

    收件人:

    /category-name/1234-post-name.html
    

    htaccess ?

    我所尝试的:

    RewriteCond %{QUERY_STRING} ^id=(.*)$
    RewriteRule ^([^/]+)/([^.]+)\.html$ /$1/%1-$2\.html [L,R=301]
    

    但这是一个持续的重定向。

    2 回复  |  直到 8 年前
        1
  •  1
  •   anubhava    8 年前

    您可以在站点根目录中使用这些规则。htaccess:

    RewriteEngine On
    
    # external redirect from actual URL to pretty one
    RewriteCond %{THE_REQUEST} \s/+([\w-]+)/([\w-]+)\?id=([^\s&]+) [NC]
    RewriteRule ^ /%1/%3-%2? [R=301,L,NE]
    
    # internal forward from pretty URL to actual one
    RewriteRule ^([\w-]+)/([^-]+)-([\w-]+)/?$ $1/$3?id=$2 [L,QSA]
    
        2
  •  1
  •   Rajendran Nadar    8 年前

    试试这个

    确保url是根url

    www.foo.com/category-name/post-name.html
    

    只有当项目url与上述url相同时,它才会工作。

    www.foo.com/blog/category-name/post-name.html
    

    这行不通,你需要相应地更新RewriteBase url。

    RewriteEngine On
    RewriteBase /
    RewriteCond %(REQUEST_FILENAME) !-f
    RewriteCond %(REQUEST_FILENAME) !-d
    

    在此处重写规则

    RewriteRule ^category-name/([0-9]+)-post-name$ /category-name/post-name.html?id=$1 [L]
    

    这应该行得通。。