.htaccess 带QSA的htaccess查询字符串

.htaccess 带QSA的htaccess查询字符串,.htaccess,mod-rewrite,query-string,qsa,.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

我试图在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文件中尝试以下操作:

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
也将被重写。

谢谢您的回复。我不熟悉写htaccess规则。如果我传递像domainname.com/welcome?user=normal&type=free&uid=100这样的链接,在htaccess文件集中传递像RewriteCond%{REQUEST\u URI}这样的规则,会怎么样!欢迎\/?[NC]RewriteRule^(.*)/welcome/?$$1/welcome.php?%1[NC,L]@Resh:在我看来,事实上,你做得不错。但是,规则末尾附加的
表示“查询字符串丢弃
”,这是
QSD`标志的一种替代方法@联邦航空局的代码是正确的。@Resh你试过我的答案了吗?如前所述,查询将自动传递。您不需要QSA标志,因为规则不创建新查询,只使用传入查询。另一方面,在正则表达式中有
^(.*)/welcome..
,但URL目录结构只有一个级别。这是一个错误,除非请求与描述不符。只需将我答案中的代码复制并粘贴到.htaccess文件中,然后尝试一下。