首页 > 解决方案 > 禁止访问者通过 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”并不安全,也不是一件好事,所以我现在正在寻找其他东西。

标签: php.htaccessredirectmod-rewritedirectory

解决方案


推荐阅读