【问题标题】:Do not allow users to access any other webpage than index.php (through .htaccess)不允许用户访问除 index.php 以外的任何其他网页(通过 .htaccess)
【发布时间】:2017-06-28 18:56:35
【问题描述】:

我刚刚主持了我的第一个网站项目。

index.php 位于文档根目录。所有其他(从属).php 页面位于名为 /pages 的子文件夹中; HTML页面位于/includejavaScript/scripts 等中的页面。

我想禁止直接(网址)访问我网站的任何附属页面。

我应该在我的 .htaccess 文件中添加什么,以便只能通过 url 从 Internet 访问文档根目录中的 index.php 或 index.html,但 不能 访问任何其他 .php还是 .html 页面?

我所说的任何其他页面是指像www.mydomain.com/pages/somepage.php 这样的页面。

我可以在我的文档根页面中创建自己的.htaccess - 事实上,我已经出于其他目的这样做了,所以我可以通过添加到这个文件来强制执行上述操作。

【问题讨论】:

  • @CBroe 来自 Apache:拒绝指令 - 控制哪些主机被拒绝访问服务器。我不想拒绝从特定主机访问我的网站。我想通过网络链接控制在​​我的文档根目录下的文件夹结构中哪些页面可以直接访问,而哪个页面不能。
  • 抱歉,在您对 Starkeen 的回答发表评论之前,您想要的内容有点不清楚。是的,如果您希望人们必须首先访问您的索引页面,然后才能访问其他页面,那么您必须通过 cookie 或会话来实现。
  • 不可能有一个,因为HTTP是stateless protocol
  • HTTPS 只是基于 TLS 的 HTTP,这并没有改变它的无状态特性。 // 您可以通过 cookie 使用 .htaccess/mod_rewrite 来 add 状态(RewriteCond 可以检查客户端发送的 cookie,RewriteRule 可以设置 cookie) - 但这可能是有点复杂;通过会话在 PHP 中实现它更容易。

标签: apache .htaccess


【解决方案1】:

要阻止除 index.htmlindex.php 之外的所有 .php 和 .html 请求,请将以下规则放在 .htaccess 的顶部:

RewriteEngine on

RewriteRule ^((?!index\.php|index\html).+\html|php)$ - [F]

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !^/(index\.html|index\.php)$
RewriteRule ^.+\.(php|html) - [F]

【讨论】:

  • 但是我仍然可以访问我的其他 .php 文件吗?
  • @Mikey 这会阻止所有人访问。
  • 对不起,但这不是我需要的。我希望人们能够访问该网站的所有网页,而不是直接通过“快捷方式”网址。也许我应该在 主页面 中设置一个 $_SESSION 变量,然后在所有其他页面中检查它。
猜你喜欢
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-27
  • 2015-03-21
  • 2021-08-28
  • 2010-11-16
相关资源
最近更新 更多