带有QSA的htaccess查询字符串

最后发布: 2013-04-04 18:04:00


问题

我试图在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]

但是有些怎么不行。 难道我做错了什么。

.htaccess mod-rewrite query-string qsa
回答

在根目录的.htaccess文件中尝试以下操作:

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

查询字符串将自动传递。


回答

您的答案和评论中的规则集混乱。 如果要使用查询字符串将/$dynamic重写为/$dynamic.php ,则必须尝试以下代码:

Options+ FollowSymlinks
RewriteEngine on

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

甚至/index1/index2/index3/etc也将被重写。