【发布时间】:2018-07-25 10:47:34
【问题描述】:
我想为特定查询属性重写规则
例如
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 并让任何其他属性,例如'?foo=' 只是为了传递和执行。
我知道 RewriteCond %{QUERY_STRING} 可以做到这一点,但我无法让它工作......
谢谢
【问题讨论】:
-
您的规则将
/shop/<anything>重写为/shop/?req=<anything>。您希望这种重写行为有什么改变? -
除了 '?req=' 之外,我想忽略任何其他情况下的重写规则。所以如果我发送 /shop/?foo=whatever 它应该忽略它,就像我从来没有任何重写规则一样。
-
所以我假设我需要一个类似 %{QUERY_STRING} ^?req= 的条件。只有这样它才能让重写规则发生!
-
这是您的完整 .htaccess 吗?正如我所说,您当前的规则是将
/shop/<anything>重写为/shop/?req=<anything>。如果您在浏览器中输入/shop/?foo=<anything>,则当前规则不会执行任何操作。 -
嘿,anubhava,原来我的代码中有一个错误...在我的 ?foo=test 请求后我没有返回 false,代码只是继续做其他工作人员所以我很困惑...感谢您确认此代码和平是正确的!
标签: .htaccess mod-rewrite query-string