php - 禁止访问者通过 URL 访问目录并在网站需要时重定向到特定页面而不阻止内部访问?
问题描述
我遇到了一个问题,我几乎用几种解决方案解决了它,但从来没有完全解决,总是有问题。
我的情况与本主题中的人相似:主题,除了我的 htaccess 中还有一个重写规则 ^([a-zA-Z0-9-_/]*)$ index.php?p=$1。
问题 ?“选项-索引”主题中描述的解决方案有效,但不适用于我的重写规则。当然,它似乎阻止了访问,但它给了我 Chrome“重定向太多”错误,我希望在这种情况下有我的 404 错误页面。例如,当我尝试访问我的“视图”目录时,我得到了我之前描述的错误,它似乎确实在 http://localhost/website/views 和 http://localhost/website/views/? p = 观看次数。
我有一些 ErrorDocument 规则,但在这种情况下它似乎不起作用,而且似乎首先重写规则不起作用,因为感觉它没有传递到我正在撰写的 index.php 中重写规则的 $1。浏览器请求的详细信息中没有代码,状态似乎是“失败”或“取消”。我现在正在使用 Wamp 和 Apache。我正在寻找解决方案,你有什么想法吗?
编辑: 在我的 .htaccess 中,我有:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^$ index.php [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9\-\_\/]*)$ index.php?p=$1
ErrorDocument 404 /website/views/404.php
<files .htaccess>
order allow,deny
deny from all
</files>
Options -Indexes
DirectoryIndex disabled
从上一个主题中,我在 httpd-vhosts.conf 中得到了这个:
<VirtualHost *:80>
ServerName localhost
ServerAlias localhost
DocumentRoot "${INSTALL_DIR}/www"
<Directory "${INSTALL_DIR}/www/">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
ErrorDocument 403 /website/views/404.php
</VirtualHost>
在我的网站中,使用重写规则,URL 中 /website/ 之后的所有内容都被视为 $1,因此请求通过我的 index.php 进行,我在其中分解 $1 参数以获得正确的控制器和功能。例如:使用 /website/article/read/1,$1 将是“article/read/1”,然后我将其分解。所有这一切都完美无缺。
现在我试图让 url 访问更安全,并且我想向所有以错误结尾的 url 显示我自己的错误页面“404.php”。问题是当我尝试访问像“视图”或“控制器”这样的 url 目录时,我收到了我在第一篇文章中所说的错误,我不知道如何显示我的错误页面。现在我尝试了不同的东西,有些工作或多或少,但我仍在等待找到解决方案。我之前尝试过并且更接近解决方案的一件事是将“DirectorySlash off”添加到 .htaccess 并且它起作用了,因为我猜这些目录不再被视为目录。但是我已经看到停用“DirectorySlash”并不安全,也不是一件好事,所以我现在正在寻找其他东西。
解决方案
推荐阅读
- python - 列表理解中的三元运算符未按预期工作
- r - 如何使用子集函数将日期转换为工作日?
- amazon-web-services - MWS 亚马逊运费报告_GET_FBA_ESTIMATED_FBA_FEES_TXT_DATA_
- javascript - 一旦所有数据库都成功连接,什么是更好的方法来初始化服务
- postgresql - 对象层次结构中的IBatis鉴别器
- ansible - 使用 ansible 过滤器将项目列表转换为行
- mysql - 通过并拥有查询 mysql grupo
- javascript - 将二进制音频文件作为 POSTMAN 二进制请求发送
- python - 基于经度和纬度的两地之间的距离
- python-3.x - 无法在数据帧的特定索引上更新具有不同值的特定行?