【问题标题】:htaccess redirect url with multiple query string args to SEO friendly urlhtaccess 将带有多个查询字符串参数的 url 重定向到 SEO 友好的 url
【发布时间】:2014-12-03 22:14:05
【问题描述】:

我已经在 StackExchange 上爬了 3 天,几乎找到了解决我的问题的方法,但一直没能解决问题。

我正在使用 htaccess 重写 URL 并将其重定向到 SEO 友好的 URL。我目前的htaccess如下。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L,QSA]

########################################
#   REMOVE INDEX.PHP FROM THE URL
########################################
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s(.*)/index\.php [NC]
RewriteRule ^ %1 [R=301,L]

##################################################
#   REWRITE QUERY STRING INTO SEO FRIENDLY URL
##################################################
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(?:index\.php)?\?page=([^\s]+)? [NC]
RewriteRule ^ /%1? [R=301,L]

目前我的链接通过 1 个主要参数“?page=somepage”。在我的用户页面上,我的链接不仅传递了页面参数,还传递了用户的 ID。该链接如下:

?page=users&id=1

此外,用户可以选择编辑自己的个人资料,因此链接如下:

?page=users&id=1&do=edit

我的 htaccess 正确处理 url 的重写和重定向,但仅当 {QUERY_STRING} 只有一个参数被传递时。

我已经使用现有的 RewriteCond 来查找查询字符串中的多个参数,并尝试更改 RewriteRule 以处理查询字符串中的多个参数。我在处理 2 个参数时成功了,但我原来的规则(1 个参数)打破了。

我应该如何编写我的 RewriteCond / RewriteRule 来处理带有 1 个或多个 {QUERY_STRING} 参数的 url?

我希望我的网址来自:

?page=users
?page=users&id=1
?page=users&id=1&do=edit

到这里:

/users
/users/1
/users/1/edit

【问题讨论】:

    标签: php apache .htaccess mod-rewrite redirect


    【解决方案1】:

    在修改了我的 htaccess 文件后,我设法找到了解决问题的方法。这只是证明,您正在寻找的答案通常是最明显和最容易被忽视的。以下是我更新后的工作 htaccess 文件。

    Options +FollowSymLinks -MultiViews
    # Turn mod_rewrite on
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?$1 [L,QSA]
    
    ########################################
    #   REMOVE INDEX.PHP FROM THE URL
    ########################################
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s(.*)/index\.php [NC]
    RewriteRule ^ %1 [R=301,L]
    
    ##################################################
    #   RERWITE QUERY STRING INTO SEO FRIENDLY URL
    ##################################################
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(?:index\.php)?\?page=([^\s]+)? [NC]
    RewriteRule ^ /%1? [R=301]
    
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(?:index\.php)?\?page=([^\s]+)&id=([^\s]+)? [NC]
    RewriteRule ^ /%1/%2? [R=301]
    
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(?:index\.php)?\?page=([^\s]+)&id=([^\s]+)&do=([^\s]+)? [NC]
    RewriteRule ^ /%1/%2/%3? [R=301,L]
    

    虽然这可以满足我的需求,但我还有另一个问题....有没有办法在这个文件中简化我的 htaccess RewriteCond / RewriteRule?

    【讨论】:

      猜你喜欢
      • 2011-08-13
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      相关资源
      最近更新 更多