重写 URL 匹配目录,具有特定的 HTTP 查询并且没有特定的 HTTP 查询组合

Rewrite URL that matches a directory, has a specific HTTP query and does NOT have a specific HTTP query combination

我遇到过很多关于基于 HTTP 查询重定向的问题,当然还有匹配 URL 的部分部分,但是 不是两者都

我的目录结构如下所示:

我的重写工作正常,除了它阻止了第二个列表项中的目录:

RewriteCond %{REQUEST_URI} !\.xml$
RewriteRule ^[^/].*/themes(.+) themes [L]

不幸的是,demo/themes/?ajax=1themes/?ajax=1 都是通过 ajax HTTP 查询请求的。但是,只有 demo/themes/ 被请求使用 foo HTTP 查询。

所以简而言之,我如何重写我的 rewrite 以仅在存在 ajax http 查询时应用 并且同时 foo http 查询存在?

您可以像这样使用重写规则:

# when ajax=<whatever> query parameter is present
RewriteCond %{QUERY_STRING} (?:^|&)ajax= [NC]
# when foo=<whatver> is not present
RewriteCond %{QUERY_STRING} !(?:^|&)foo= [NC]
# when URI is not ending with .xml
RewriteCond %{REQUEST_URI} !\.xml$ [NC]
# rewrite handler
RewriteRule ^[^/].*/themes(.+) themes [L]