重写 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 的部分部分,但是 不是两者都。
我的目录结构如下所示:
- http:///localhost/common_parent/.htaccess
- http:///localhost/common_parent/demo/themes/
- http:///localhost/common_parent/主题/?ajax=1
我的重写工作正常,除了它阻止了第二个列表项中的目录:
RewriteCond %{REQUEST_URI} !\.xml$
RewriteRule ^[^/].*/themes(.+) themes [L]
不幸的是,demo/themes/?ajax=1
和 themes/?ajax=1
都是通过 ajax
HTTP 查询请求的。但是,只有 demo/themes/
被请求使用 foo
HTTP 查询。
- http:///localhost/common_parent/demo/themes/?ajax=1&foo=bar
- http:///localhost/common_parent/主题/?ajax=1
所以简而言之,我如何重写我的 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]
我遇到过很多关于基于 HTTP 查询重定向的问题,当然还有匹配 URL 的部分部分,但是 不是两者都。
我的目录结构如下所示:
- http:///localhost/common_parent/.htaccess
- http:///localhost/common_parent/demo/themes/
- http:///localhost/common_parent/主题/?ajax=1
我的重写工作正常,除了它阻止了第二个列表项中的目录:
RewriteCond %{REQUEST_URI} !\.xml$
RewriteRule ^[^/].*/themes(.+) themes [L]
不幸的是,demo/themes/?ajax=1
和 themes/?ajax=1
都是通过 ajax
HTTP 查询请求的。但是,只有 demo/themes/
被请求使用 foo
HTTP 查询。
- http:///localhost/common_parent/demo/themes/?ajax=1&foo=bar
- http:///localhost/common_parent/主题/?ajax=1
所以简而言之,我如何重写我的 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]