禁止访问者通过 URL 访问目录并重定向到特定页面而不阻止网站需要时的内部访问?

问题描述

我遇到了一个问题,我几乎用几种解决方解决了它,但从来没有完全解决过,问题总是存在。

我和这个话题中的人有类似的情况:topic 除了我还有一个重写规则 ^([a-zA-Z0-9-_/]*)$ index.PHP?在我的 htaccess 中 p=$1。

问题?主题“选项-索引”中描述的解决方案有效,但不适用于我的重写规则。当然,它似乎阻止了访问,但它给了我 Chrome“重定向过多”错误,我希望在这种情况下我的 404 错误页面。例如,当我尝试访问我的“views”目录时,出现了我之前描述的错误,它似乎确实在 http://localhost/website/views 和 http://localhost/website/views/? p=观看次数

我有一些 ErrorDocument 规则,但在这种情况下它似乎不起作用,而且似乎重写规则首先不起作用,因为感觉它没有在我的 index.PHP 中传递我' m 与重写规则的 $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”并不安全,也不是一件好事,所以我现在正在寻找其他东西。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)