我怀疑REQUEST\\u URI实际上正在解析为index.php?page=xxx
是的,mod\\u rewrite似乎是在计算Apache表达式之前处理的。因此,URL已重写为index.php
(WordPress前端控制器),然后再计算表达式中请求的URL。
然而,我们可以通过使用SetEnvif
基于请求的URL(发生在mod\\u rewrite之前),并在表达式中检查此env var。然而,另一个复杂的问题是,此环境变量被重命名/前缀为REDIRECT_
将URL重写(第一轮处理)后index.php
.
例如:
SetEnvIf Request_URI "news/?$" APPLY_CORS
<If "-n reqenv(\'REDIRECT_APPLY_CORS\')">
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
</If>
SetEnvIf
设置
APPLY_CORS
环境收件人
"1"
如果正则表达式与请求匹配。
这个-n
Apache表达式中的运算符只是测试返回的字符串是否为空。
<小时>UPDATE: 另一种方法是对照THE_REQUEST
而是服务器变量,它包含HTTP请求的第一行(例如。GET /mysite/news HTTP/1.1
*1),并且不会随着URL的重写而更改。有一点需要注意的是,正则表达式可能更复杂一些。
()THE_REQUEST
包含从客户端发送的原始%编码URI、查询字符串和全部。)
例如,与上述内容等效的内容(允许任何合理的查询字符串)如下所示:
<If "%{THE_REQUEST} =~ m#news/?(\\?[\\w=&-]*)?\\s#">
:
</If>