2013-04-04 154 views
0

我想设置htaccess的共同规则使用不同的查询字符串像htaccess的查询字符串QSA

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

删除扩展名为.php和链接,并像

预期链接

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] 

但一些如何不工作。难道我做错了什么。

回答

1

在.htaccess文件的根目录试试这个:

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

查询字符串会被自动传递。

+0

感谢您的回复。我是编写htaccess规则的新手。如果我通过如domainname.com/welcome?user=normal&type=free&uid=100和htaccess文件集规则(如:RewriteCond%{REQUEST_URI}!welcome \ /? [NC] RewriteRule ^(。*)/ welcome /?$ $ 1/welcome.php?%1 [NC,L] – rock 2013-04-04 18:48:36

+0

@Resh:在我看来,事实上,你的行为是正确的。然而,规则末尾附加的'?'表示'查询字符串丢弃',是'QSD'标志的替代方法。 @ faa的代码是正确的。 – 2013-04-04 19:09:07

+0

@Resh你试过我的回答吗?如上所述,查询将自动传递。您不需要QSA标志,因为规则不会创建新的查询,只需使用传入的查询。另一方面,在正则表达式中有'^(。*)/ welcome..',但URL目录结构只有一个级别。除非请求不符合描述,否则这是错误的。只需将我的答案中的代码复制并粘贴到.htaccess文件中,然后试一试。 – 2013-04-04 19:19:36

0

您的规则在您的回答和您的评论中设置无序。如果你想/$dynamic被改写成/$dynamic.php与查询字符串,你必须尝试这个代码:

Options+ FollowSymlinks 
RewriteEngine on 

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

即使/index1/index2/index3/etc将被改写。