.htaccess特定查询字符串的RewriteRule

时间:2018-02-14 18:58:35

标签: .htaccess mod-rewrite query-string

我想RewriteRule获取特定查询属性

e.g。

https://website.com/shop/?req=cosmetics

为:

https://website.com/shop/cosmetics

我通过以下方式实现了这一目标:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^shop/(.+)$ shop/?req=$1 [L,QSA]

我的问题是这将替换任何查询属性......

我正在寻找的是在'?req ='上明确地执行RewriteRule。并让任何其他attr例如'富='只是传递和执行。

我知道RewriteCond%{QUERY_STRING}可以实现这一点,但我无法使其正常工作......

由于

1 个答案:

答案 0 :(得分:1)

解决方案是更改第一个规则并执行类似的操作,否则服务器无法预测自己的其他查询字符串,除了现有的req

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^shop/(.*)/(.*)$ /shop/?$1=$2 [L,QSA]

因此,请求https://website.com/shop/?req=cosmetics将来自https://website.com/shop/req/cosmetics请求,并且根据您的建议,https://website.com/shop/?foo=cosmetics将来自https://website.com/shop/foo/cosmetics请求

如果要从商店目录.htaccess文件中应用此代码:

   RewriteEngine On       
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_URI} !^/shop/merchant 
   RewriteRule ^(.*)/(.*)$ /?$1=$2 [L,QSA]

它也将排除merchant,测试它。