如何使用htaccess防止查询字符串拖到URL的末尾


How can I prevent the query string from getting trailed to the end of the URL with htaccess?

我有以下htaccess:

Options -Multiviews -Indexes +FollowSymLinks
RewriteEngine On
RewriteRule ^(pageA|pageB|pageC|pageD)(?:'/('d+)'/?(.*))?$ 
            ./$1/?var1=$1&var2=$2&var3=$3 [NC,QSA,L]

以下URL工作正常,因为在文件夹层次结构中,文件夹名称为(pageA,pageB….),每个文件夹中都有一个index.php文件,并且正在处理URL中传递的id以查看页面上的正确内容:

www.domain.com/pageA/

www.domain.com/pageA/12/title of item-number-12

当我只访问文件夹名称并删除尾部斜杠时,就会出现问题:

www.domain.com/pageA

请求的页面正确加载,但查询字符串将附加到url,如下所示:

www.domain.com/pageA/?var1=页面A&var2=&var3=

如何防止查询字符串拖到URL末尾

只需添加另一个只匹配pageA/pageB等的重写规则,并将其重写到不包含querystring的URL。所以你最终会得到这样的东西:

Options -Multiviews -Indexes +FollowSymLinks
RewriteEngine On
RewriteRule ^(pageA|pageB|pageC|pageD)$ ./$1/ [L]
RewriteRule ^(pageA|pageB|pageC|pageD)(?:'/('d+)'/?(.*))?$ 
            ./$1/?var1=$1&var2=$2&var3=$3 [NC,QSA,L]