0

如何通过 .htaccess 文件重定向,只有 index.html 可以通过 URL 访问。我已经得到了这个:

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 脚本仍然应该被允许访问我的网络服务器上的每个文件。

4

2 回答 2

6

这些行:

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

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

Deny From All

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

我强烈建议阅读 mod_rewrite 文档

编辑

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

于 2012-11-16T10:20:39.213 回答
0

尝试以下

RewriteRule /.* http://www.new-domain.com/index.html
于 2012-11-16T10:16:04.800 回答