ForceType/htaccess文件扩展名问题 - 没有扩展名的文件?

8
这是我的.htaccess文件:
<IfModule php4/5.c>
php_admin_flag Option
php_flag Option
php_admin_value Option
php_value Option
</IfModule>  
<Files .>
ForceType application/x-httpd-php
SetHandler application/x-httpd-php
</Files>

上述代码不知何故能够正常工作,但我并不确定为什么... 我对.htaccess有一定了解,但主要是用于阻止机器人/蜘蛛等,而不是文件类型。文件顶部用于自定义php.ini文件(我试图在自己的Apache服务器上复制,就像在Web托管公司的网站上没有访问正确的php.ini文件一样,在我的测试站点上增加现实感)。
虽然我知道如何使用ForceType和SetHandler,但我不知道如何将其用于无扩展名的文件(例如,如果我有一个名为testing1的文件,我可以将其运行为php)。
以前我是这样做的:
<Files testing1>
ForceType application/x-httpd-php
SetHandler application/x-httpd-php
</Files>

但是对于每个没有扩展名的文件都这样做变得很烦人。

基本上,我想要做的是通过ForceType/SetHandler指令确保我有没有扩展名的文件,但这可能吗?(第一个示例中上面的符号是通配符吗?)

谢谢

5个回答

15

DefaultType在Apache 2.4中已被删除。您最好的选择是以下内容:

DefaultType在Apache 2.4中已被删除。您最好的选择是以下内容:

<Files *>
    ForceType application/x-httpd-php
</Files>
<Files *\.*>
    ForceType None
</Files>

这将捕获所有没有扩展名的文件并将它们作为 PHP 处理。所有有扩展名的文件将按照正常方式处理。

使用 mod_mime_magic 不是一个好选择,因为需要每次检查每个文件。有关更多信息,请参阅 mod_mime_magic 文档


2
请记住,如果您的网站具有用户可以上传文件的功能,则该文件可能会作为 PHP 执行,然后您就知道会发生什么了...BOOOOOM。 - Umakant Patil
1
任何允许上传文件而没有正确检查上传文件内容的人都是在自找麻烦,无论什么情况下。 - Tigger
2
真的,但在答案中加入警告可能不是坏主意,因为我们知道有些人可能会复制粘贴它。 - Umakant Patil

4

对于Apache 2.3及更早版本,只需按照以下方式更改DefaultType

DefaultType text/html

这样,每个未被识别的文件(包括没有扩展名的文件)都将被视为HTML。


对于Apache 2.4及以上版本,请参见Tigger的答案


1
DefaultTypeApache 2.4 中已被移除(严格来说仍然存在,但仅作为警告)。 - Tigger
@Tigger 很好!我编辑了我的回答。 - Mathias Bynens

2

仅限没有扩展名的文件

这个解决方案只影响没有扩展名的静态服务文件:(感谢Eugene Kerner

<FilesMatch "^[^.]+$">
    ForceType application/x-httpd-php
    </FilesMatch>

任何未知内容

这个影响任何没有Content-Type头信息的响应。换句话说,它模仿了旧的DefaultType指令的行为:

Header set Content-Type "application/x-httpd-php" "expr=-z %{CONTENT_TYPE}"

在这里可以使用`setifempty`代替`-z`表达式,但是它会失败并覆盖每个响应中的头部,无论是否为空。我不知道为什么。Eric Covener说这是因为“直到最后一秒钟”才添加`Content-Type`标头。
仅适用于旧服务器:
在升级到2.4之后,这将失败:(请参见手册)
DefaultType application/x-httpd-php

0

我花了很长时间来解决一个类似的问题,即ForceType和DefaultType在某些页面上无法工作。

我找到了与kbk相同的答案。编辑/etc/httpd/conf/httpd.conf并注释掉Mime Magic模块的行:

<IfModule mod_mime_magic.c>
#   MIMEMagicFile /usr/share/magic.mime
#    MIMEMagicFile conf/magic
</IfModule>

之后,重新启动Apache。

您可以在此处找到更多信息:http://realtechtalk.com/HTML_files_in_Apache_still_displaying_as_raw_text_even_with_DefaultType_ForceType_etc-1752-articles


-1

(1)修改 .htaccess 或 apache2.conf 或 httpd.conf 文件

来源:

添加: DefaultType application/octet-stream

如果存在则删除: DefaultType text/plain

重启 Apache

(2) 启用 mime_magic

来源:

启用mime_magic $ sudo a2enmod -> mime_magic
$ sudo /etc/init.d/apache2 restart

禁用一个模块:
$ sudo a2dismod
-> mime_magic
$ sudo /etc/init.d/apache2 restart

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