Apache RewriteEngine - 重写index.php不存在的任何内容

时间:2017-03-30 07:34:24

标签: apache .htaccess mod-rewrite url-rewriting apache2.4

我现在真的很挣扎。
首先,我在谷歌和这里搜索过,并没有找到适用于我的解决方案。我现在没有多少时间完全深入研究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']

中获取原始查询路径

1 个答案:

答案 0 :(得分:0)

您是否只需要在RewriteRule上使用[DPI]标志来摆脱计算出的PATH_INFO?