Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用.htaccess文件限制PHP文件访问?_Php_.htaccess - Fatal编程技术网

如何使用.htaccess文件限制PHP文件访问?

如何使用.htaccess文件限制PHP文件访问?,php,.htaccess,Php,.htaccess,这是我的.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文件。根据

这是我的.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文件。

根据对您问题的评论,您的要求实际上比您在问题中所写的要复杂一些

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

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

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

规则本身看起来不错,但为什么会有这些条件呢?它们实际上允许访问其他php文件!如果我删除了这些条件,那么我的应用程序文件夹中的css和js就不会加载到浏览器中,因此您有更复杂的需求。然后你需要更具体的条件,只阻止访问php文件,而不是像你编码的那样访问所有现有文件。好吧,它对我有效,我还有另一个问题,当我访问app文件夹中的某个文件时,css和js文件的位置相对于该文件而不是index.php发生改变。所以它显示的页面没有css和js。如何解决它?如果总是调用同一个脚本(index.php),我看不出这怎么可能发生。从那里到资产的路径是静态的、清晰的和定义的。我看不出有什么问题。您可以开始在对资产的引用中使用绝对路径,但这是一种糟糕的样式,因为它会降低代码的可移植性。此代码是否适用于所有子文件夹?。也就是说,如果对子文件夹中的任何php文件发出的请求将重定向到index.php文件,它将适用于放置和解释此
.htaccess
样式文件的子文件夹中的所有子文件夹,因为它不关心文件夹。它只检查请求的路径是否以文件扩展名
.php
结尾。请不要误会:我的印象是您并不真正理解这些东西是如何工作的。但是,如果你使用你不理解和依赖的东西,那是非常危险的。我建议您开始阅读apaches重写模块的文档,了解实际工作原理: