【发布时间】: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