发送访问被拒绝在apache上使用htaccess的错误,除了某个文件的所有文件
问题描述:
我有一个文件夹包含各种.php文件,我想阻止直接访问它们,但是index.php。发送访问被拒绝在apache上使用htaccess的错误,除了某个文件的所有文件
这是我到目前为止,它似乎工作:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ /403.php/$1 [R=403]
</IfModule>
这是做了正确的方法是什么?另外请注意,403.php文件夹中的文件实际上并不存在。
编辑:为了更好地阐明我正在做的事 - 我有一个包含index.php文件的文件夹(我们可以假设名为“includes”),以及index.php包含的各种其他文件。
我不希望用户/恶意机器人/谁能够直接访问index.php以外的“includes”中的任何内容。
如果他们到达其他任何地方(无论文件是否存在),我想向浏览器发送403-拒绝访问的HTTP响应代码。
答
正确的方法是使用F
标志,它只是返回一个403禁止的,你可以使用-
作为只是意味着目标“什么也不做,让URI穿过不变”:
RewriteEngine on
RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ - [L,F]
或者,您可以尝试将条件与规则结合使用:
RewriteEngine on
RewriteRule !index\.php$ - [L,F]
答
您可以创建错误页面。实际上,一些控制面板有一个应用程序,允许用户使用.shtml文件扩展名创建启用了SSI的403 (禁止)页面。在cPanel那个应用程序。有“错误页面”其中发现“高级”部分,并且403页面将保存在403.shtml基地名称。如果您没有找到这样的应用程序,则只有在您的服务器配置为允许此项时,才可以手动创建启用了SSI的HTML文件。如果这是不可能的,你仍然可以使用另一个扩展。
所以,比较正确的做法是重新映射存在的错误页面,比如像这样:
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteRule ^(.*) /403.shtml
但无论如何,你想干什么?
谢谢!你的重写规则'RewriteRule ^(。*)$ - [L,F]'是绝对要走的路,更短,肯定比以前更正确。 – adriano72 2013-04-06 22:59:39