使用htaccess文件阻止特定文件扩展名的访问?

3

我正在使用这段代码将所有请求发送到一个单独的php文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) myfile.php?id=$1 [QSA,L]

但是现在我也想阻止对myfile.php和其他php文件的直接访问。 我不希望php文件可以通过浏览器直接打开,而是必须能够用于包含等操作。

我该如何做?


如果你把所有文件都重命名为myfile.php,但是又拒绝访问myfile.php,我认为你会遇到麻烦。或者我误解了问题? - Sodved
重写后的URL看起来像http://domain.com/stuff/substuff,而stuff/substuff由myfile.php处理,因此php不会直接打开。 - riviraz
2个回答

5
您可以使用“文件”指令来阻止文件。要阻止以.inc结尾的文件,请按以下方式操作:
<Files ~ "\.inc$">
Order allow,deny
Deny from all
</Files>

但是这对于(假设).php.inc.bak.ext都不起作用。我需要为每个扩展名逐行编写吗? - 夏期劇場
1
要阻止多个扩展名,您可以使用类似于 <Files ~ "\.(inc|bak|ext)$"> 的正则表达式。 - Cedric Knight
请注意,此代码可能无法在 Apache 2.4+ 上运行。请参阅 https://httpd.apache.org/docs/trunk/upgrading.html。 - Eugen Mihailescu

2
也许这可以帮到您:

RewriteCond %{REQUEST_URI} !(.*).php$ [NC]
RewriteRule ^.* - [F,L]

这里有几个不错的例子:Apache wiki: RewriteCond


但是这对于(假设).php.inc.bak.ext等文件扩展名都不起作用。我需要为每个扩展名逐行编写代码吗? - 夏期劇場
一切运作正常。但你需要确保RewriteEngine已经开启,即完整版本: RewriteEngine on RewriteCond %{REQUEST_URI} !(.*).php$ [NC] RewriteRule ^.* - [F,L] - Andron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接