.htaccess mod_rewrite.c使用HTTP_REFERER

时间:2017-07-06 17:53:21

标签: apache .htaccess mod-rewrite http-referer

我想在网址栏中输入.htaccess时让http://www.example.org/aa/exists.php获取页面http://www.example.org/aa/doesntexist.php.htaccess文件显然正常运行,因为DirectoryIndex行产生了所需的结果,网址栏中的http://www.example.php获取了页面http://www.example.php/aa/default.php

我尝试根据我的情况调整对how to redirect using HTTP_REFERER on htaccess的响应,但没有成功。

以下是我的.htaccess文件的全文。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_REFERER} ^(.*)www\.example\.org/aa/doesntexist\.php [NC]
    RewriteRule ^(.*)(www\.example\.org/aa/)doesntexist\.php(.*)$ $1$2exists.php$3 [NC,L]
    DirectoryIndex aa/default.php
</IfModule>

http://www.example.org/aa/doesntexist.php的请求会产生以下错误:

未找到

在此服务器上找不到请求的网址/aa/doesntexist.php。

此外,尝试使用ErrorDocument处理请求时遇到404 Not Found错误。

1 个答案:

答案 0 :(得分:0)

尝试在启动引擎之前添加Options +FollowSymlinksAllow Override All作为第一个命令。

我在你的状况或规则中看不出任何错误。我最近有一个非常类似的问题可以通过这种方式解决。 如果这不是问题,你可以查看http://forum.modrewrite.de/topic82.html 不幸的是,这是德语,但也许有用 - 至少在谷歌翻译的帮助下(肯定不完美,但足够好)。

顺便说一句:如果有理由检查引荐来源而不仅仅是请求的URI,请保留它。否则,单凭规则就能做到你想要的。如果条件的内容与规则的模式匹配,则不需要条件。