使用QSA的htaccess查询字符串

时间:2013-04-04 18:04:01

标签: .htaccess mod-rewrite query-string qsa

我正在尝试在htaccess中设置通用规则,以便使用不同的查询字符串删除.php扩展名和链接,例如

domainname.com/welcome.php?user=normal&type=free&uid=100
domainname.com/welcome.php?user=normal
domainname.com/welcome.php?log=new&theme=red

预期链接如

domainname.com/welcome?user=normal&type=free&uid=100
domainname.com/welcome?user=normal
domainname.com/welcome?log=new&theme=red

在htaccess文件中设置的规则如:

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*)/welcome/$ $1/welcome.php? [QSA,NC,L]

但有些人怎么不工作。我做错了什么。

2 个答案:

答案 0 :(得分:1)

在根目录的.htaccess文件中尝试:

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI}  !welcome\.php [NC]
RewriteRule ^welcome/?  /welcome.php      [NC,L]

查询字符串将自动传递。

答案 1 :(得分:0)

您的答案和评论中的规则设置无序。如果您希望使用查询字符串将/$dynamic重写为/$dynamic.php,则必须尝试以下代码:

Options+ FollowSymlinks
RewriteEngine on

RewriteCond %{REQUEST_URI} ^/([a-z0-9-_]+)/?$
RewriteRule ^(.*) /%1.php [QSA]

即使/index1/index2/index3/etc也会被重写。