我正在尝试使用 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 脚本本身中处理它?