【问题标题】:How to restrict PHP file access using .htaccess file?如何使用 .htaccess 文件限制 PHP 文件访问?
【发布时间】:2015-09-26 20:08:55
【问题描述】:

这是我的 .htaccess 文件

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?r=$1 [QSA,L]

我的基本文件夹包含一个“index.php”文件和一个“app”文件夹,而app文件夹包含一些php文件,我不想使用浏览器直接访问app文件夹中的这些php文件。

【问题讨论】:

  • 规则本身看起来不错,但为什么会有这些条件?他们实际上 允许 访问其他 php 文件!
  • 如果我删除条件,那么我的应用程序文件夹中的 css 和 js 没有加载到浏览器中
  • 啊,所以你有更复杂的要求。然后,您需要更具体的条件,仅阻止访问 php 文件,而不是阻止您编码时的 所有 现有文件。

标签: php .htaccess


【解决方案1】:

正如您在 cmets 中针对您的问题所得出的那样,您的要求实际上比您在问题中所写的要复杂一些。

我想这就是你真正想要的:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteRule ^(.*)$ index.php?r=$1 [QSA,L]

当请求中的文件名以.php 文件扩展名结尾时,这会将请求重写为index.php

【讨论】:

  • 好的,它对我有用,我遇到了另一个问题,当我访问 app 文件夹中的某个文件时,css 和 js 文件的位置相对于该文件而不是 index.php 发生了变化。所以它显示没有 css 和 js 的页面。如何解决?
  • 如果总是调用相同的脚本 (index.php),我看不出这会如何发生。从那里到资产的路径是静态的、清晰的和定义的。我在那里没有看到问题。您可以开始在对资产的引用中使用绝对路径,但这是一种不好的风格,因为它会降低代码的可移植性。
  • 此代码是否适用于所有子文件夹?也就是说,如果对子文件夹中的任何 php 文件的请求将重定向到 index.php 文件?
  • 它将适用于放置和解释此 .htaccess 样式文件的文件夹的所有子文件夹,因为它不关心文件夹。它只检查请求的路径是否以文件扩展名.php结尾。
  • 一般性评论,请不要误会:我的印象是您并不真正了解这些东西的工作原理。但是如果你使用你不理解的东西并依赖它们,那是非常危险的。我建议你开始阅读 apaches 重写模块的文档来了解事情是如何工作的:httpd.apache.org/docs/current/mod/mod_rewrite.html
猜你喜欢
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多