无法通过URL访问文件

Big*_*azz 0 .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]
Run Code Online (Sandbox Code Playgroud)

如果有人输入例如"www.mypage.com/skd/lasnd",但是如果有人输入网络服务器上存在的文件,例如"www.mypage.com/php/login.php",它将正常工作被重定向到该页面.怎么禁止那个?

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

Mar*_*ski 5

这些线:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Run Code Online (Sandbox Code Playgroud)

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

Deny From All
Run Code Online (Sandbox Code Playgroud)

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

我强烈建议你阅读mod_rewrite docs

编辑

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