无法通过URL访问文件

时间:2012-11-16 10:10:32

标签: .htaccess

如何通过.htaccess文件重定向,只能通过URL访问index.html。 我已经知道了:

RewriteEngine on
RewriteBase /
Options +FollowSymlinks

RewriteRule ^/?login/?$ /php/login.php [NC,R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.html [L,QSA]

如果有人输入例如“www.mypage.com/skd/lasnd”,它会正常工作 但是如果某人输入了存在于网络服务器上的文件,例如“www.mypage.com/php/login.php”,他将被重定向到该页面。如何禁止?

更确切地说:我的 JavaScript&仍应允许PHP脚本访问我的网络服务器上的每个文件。

2 个答案:

答案 0 :(得分:5)

这些行:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

条件是“如果REQUEST_FILENAME不是文件,如果REQUEST_FILENAME不是目录”,如果两者都满足则会发生RewriteRule。这通常是为了允许“友好的网址”工作,同时不重写任何图像,C​​SS等。您可以通过多种方式阻止对文件的访问,但您必须注意不要阻止太多(如所述图像等等)。最简单的方法是将您的文件放在子目录中,并在该目录中添加另一个.htaccess文件行

Deny From All

这将使httpd重新发送对该目录和子目录中的任何内容的任何请求(除非另一个.htaccess覆盖这些规则),而您的脚本将能够毫无问题地访问它们。

我强烈建议您执行read mod_rewrite docs

修改

没有“我的javascript”和“他们的javascript”。有请求,这就是你可以肯定的。您无法分辨您的访问权限和访问权限。 “我只想通过在浏览器地址行输入来拒绝请求” - 你也说不出来。你理论上可以检查REFERER,如果没有设置,那么假设它直接命中,但REFERER来自浏览器,所以它也可以伪造。我个人默认阻止所有REFERERS,所以我的所有请求都没有任何REFERER,即使这些也不是直接的。你可以试试cookies,但是再次 - 这些可以被脚本抓取并发回。唯一真正的选择是Deny from all这些文件,并通过某种脚本(即PHP)“tunel”它们,如果用户只对目标文件 执行file()以前使用登录名和密码验证自己。任何其他尝试都从一开始就被打破。

答案 1 :(得分:0)

尝试以下

RewriteRule /.* http://www.new-domain.com/index.html