1

我正在尝试使用 Apache mod_rewrite 来实现以下目标:

在文档根目录中,我有这些文件(例如):

.htaccess
index.php
dlscript.php

我想/downloads/this_is_path_info重写为/dlscript.php/this_is_path_info,所以:

RewriteRule ^downloads$ downloads/ [R=301,L]
RewriteRule ^downloads/(.*) dlscript.php/$1 [NE,L]

以上就是这样做的。

然而,我希望对文件的请求/dlscript.php返回一个 HTTP 404 代码,所以我尝试:

RewriteRule ^dlscript.php - [R=404,L]

但这也是 404 /downloads/。我试过添加RewriteCond %{REQUEST_URI} /dlscript.php,但似乎 mod_rewrite 用重写的替换了 %{REQUEST_URI} 。

我怎么能阻止直接访问dlscript.php但启用其他重写?

编辑:

感谢 Jon Lin,我提出了这个想法:

RewriteCond %{REQUEST_URI} ^/dlscript.php
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD|TRACE)\ /dlscript.php
RewriteRule .* - [R=404,L]

这奏效了。第一条规则是防止 ErrorDocument 出现问题。

但我想知道这是否应该被视为“黑客”?还有其他合适的方法吗?假设我也想要ErrorDocument /error.php/error.php返回 404,其他方法而不是在 php 脚本本身中处理它?

4

1 回答 1

0

试试这个:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /dlscript.php
RewriteRule . - [R=404,L]

匹配%{THE_REQUEST}可确保您不匹配内部重写的 URI。

于 2012-06-19T06:45:38.720 回答