不是所有的parms都用mod_rewrite解析,为什么?

时间:2013-11-03 18:12:56

标签: regex apache .htaccess mod-rewrite url-rewriting

我的mod_rewrite再次出现问题,我的.htaccess文件如下所示:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w\d~%.:_\-]+)$ index.php?page=$1 [QSA]
RewriteRule ^news/([0-9]+) /news?id=$1
RewriteRule ^contact/([0-9]+) /contact?do=$1
RewriteRule ^account/([a-zA-Z]+) /account?action=$1
RewriteRule ^admin/([a-zA-Z]+) /admin?action=$1

它们都可以工作,但它不能解析后的参数吗? 即
www.domain.com/account/settings
按照我的意愿工作,但如果URL中有更多的$ _GET参数,那么就不会对其进行解析。
即中国网站www.domain.com/account/settings?parm=value < br />不起作用,最后一个parm不会被解析到服务器。

由于

1 个答案:

答案 0 :(得分:1)

您的规则中需要QSA标记。 QSA (Query String Append)标志会在添加新查询参数时附加现有查询参数。

您转换的规则:

Options +FollowSymlinks
RewriteEngine on

RewriteRule ^news/([0-9]+)/?$ /news?id=$1 [L,QSA]
RewriteRule ^contact/([0-9]+)/?$ /contact?do=$1 [L,QSA]
RewriteRule ^account/([a-zA-Z]+)/?$ /account?action=$1 [L,QSA]
RewriteRule ^admin/([a-zA-Z]+)/?$ /admin?action=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w\d~%.:_\-]+)$ index.php?page=$1 [L,QSA]

参考:Apache mod_rewrite Introduction