如何通过.htaccess限制PHP页面仅应用内访问,仅开放index.php入口?
解决内部页面仅允许应用内访问的问题
问题场景
我希望自己的应用仅允许内部页面之间互相访问、引用各类资源页面,只有作为应用入口的主页面index.php除外。举个实际例子:如果我在本地桌面创建一个带有指向应用页面链接或表单的HTML文件,当通过这个外部文件访问应用内页面时,应该被自动重定向到index.php。
最初尝试的无效配置
我一开始用了下面的.htaccess规则,但发现桌面的外部文件还是能正常访问服务器页面,完全没达到预期效果:
Order Deny,Allow Deny from all Allow from 127.0.0.1 Allow from ::1 <Files /index.php> Order Allow,Deny Allow from all </Files> <FilesMatch ".*\.(css|js)$"> Order Allow,Deny Allow from all </FilesMatch>
已生效的解决方案
后来我修改了.htaccess配置,现在已经完美实现需求了:
RewriteEngine on RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC] RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] RewriteCond $1 !^(index\.php) RewriteRule ^(.*)$ http://localhost/website/index.php [R,L]
配置逻辑说明
- 首先开启
RewriteEngine启用URL重写模块 - 前两条
RewriteCond用来检查请求的来源(Referer)是否非本地服务器(localhost),[NC]参数表示忽略大小写匹配 - 第三条规则专门排除入口页面
index.php,避免出现循环重定向的问题 - 最后一条
RewriteRule会把所有不符合条件的请求,直接重定向到指定的应用入口index.php页面
内容的提问来源于stack exchange,提问作者Pavllo
相关产品推荐
相关产品推荐

