我现在真的很挣扎。
首先,我在谷歌和这里搜索过,并没有找到适用于我的解决方案。我现在没有多少时间完全深入研究Apache文档,以便对RewriteEngine有所了解(稍后会做的)。
我需要什么
我需要处理来自Google Adwords广告系列的特殊要求,如下所示:http://website.com/something/%first_param%/%second_param%/%third_param%
在我的文档根目录中,我有 index.php ,其中我使用正则表达式解析查询字符串并获取这些参数,如下所示:
$request_URI = $_SERVER['REQUEST_URI'];
preg_match('/\/[^\/]+\/([^\/]+)\/([^\/]+)\/([^\/]+)/', $request_URI, $matches);
问题
Apache成功地重定向了所有内容,但它还包含了对所有资源的所有额外请求,因此它不是获取资源,而是获得相同的index.php。
目前我的文档根目录中有 .htaccess 文件:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php?url=$0 [QSA,L]
请注意,我正在为此项目使用虚拟主机:
<VirtualHost *:80>
ServerName masuma.hyperauto.local
DocumentRoot "c:/wamp64/www/projects/masuma landing"
</VirtualHost>
我在上面的根目录中有 index.php 。
我也启用了RewriteEngine日志并在这里找到了有趣的东西,但我仍然无法解决这个问题:
add path info postfix: C:/wamp64/www/projects/masuma landing/test -> C:/wamp64/www/projects/masuma landing/test/test/firm/css/bootstrap.min.css, referer: host_here/test/test/firm/toyota
strip per-dir prefix: C:/wamp64/www/projects/masuma landing/test/test/firm/css/bootstrap.min.css -> test/test/firm/css/bootstrap.min.css, referer: host_here/test/test/firm/toyota
applying pattern '.*' to uri 'test/test/firm/css/bootstrap.min.css', referer: host_here/test/test/firm/toyota
rewrite 'test/test/firm/css/bootstrap.min.css' -> 'index.php?url=test/test/firm/css/bootstrap.min.css', referer: host_here/test/test/firm/toyota
split uri=index.php?url=test/test/firm/css/bootstrap.min.css -> uri=index.php, args=url=test/test/firm/css/bootstrap.min.css, referer: host_here/test/test/firm/toyota <br><br>
我可以在这里看到,它将查询字符串中的路径预先设置为资源文件名,例如 test / test / firm / css / bootstrap.min.css ,但资源在文档中根!
UPD:解决方案
[DPI]
中的标记RewriteRule
解决了问题
现在规则看起来像RewriteRule .* index.php?url=$0 [QSA,L,DPI]
而且,重要的是,我仍然可以在$_SERVER['REQUEST_URI']
答案 0 :(得分:0)
您是否只需要在RewriteRule上使用[DPI]
标志来摆脱计算出的PATH_INFO?