使用 .htaccess 使所有 .html 页面作为 .php 文件运行?

Using .htaccess to make all .html pages to run as .php files?

提问人:Michael Novello 提问时间:1/14/2011 更新时间:2/2/2023 访问量:147900

问:

我需要将所有 .html 文件作为 .php 文件运行,并且在明天的演示之前我没有时间更改所有链接。有没有办法用我的 Apache 服务器“破解”它?

PHP HTML APACHE .HT访问

评论

2赞 coreyward 1/14/2011
虽然这不是对您的问题的直接答案,但使用或任何好的 IDE 将允许您在整个目录/项目中查找和替换。此外,您可以在 Linux 上非常轻松地批量重命名文件。sed
0赞 Marc-François 1/14/2011
是的,但是如果您使用 sed 重命名文件,您可能会收到许多断开的链接。当然,您也可以尝试更改您网站中的所有链接,但也有来自互联网上的链接可能指向您的网站。

答:

2赞 andrewk 1/14/2011 #1

这里把它放在你的.htaccess中

AddType application/x-httpd-php .php .htm .html

更多信息请见本页

72赞 Marc-François 1/14/2011 #2

在网站的根目录下创建一个 .htaccess 文件,并添加以下行:

[Apache2 @ Ubuntu/Debian:使用此指令]

AddType application/x-httpd-php .html .htm

或者,从下面的评论中:

AddType application/x-httpd-php5 .html .htm

如果你把PHP作为CGI运行(可能不是这样),你应该写:

AddHandler application/x-httpd-php .html .htm 

评论

8赞 melat0nin 4/9/2014
我必须添加到类型的末尾才能使其工作,即 (运行 PHP 5.3 的 CentOS)5AddType application/x-httpd-php5 .html .htm
23赞 Lee Blake 4/17/2014
这对我不起作用。它使Firefox想要下载html文件并显示它。
2赞 Kaleem Sajid 6/28/2015
@LeeBlake 我遇到了同样的问题。运气好吗?
4赞 Muhammad Muazzam 6/25/2018
它导致文件正在下载
1赞 spacer GIF 2/3/2020
@AndreiKrasutski做到了。仍在下载中。
5赞 ilight 8/29/2012 #3

对于仍然有麻烦的人,

试试这个(我的主机来自 Godaddy,这是所有答案中唯一对我有用的东西。

AddHandler x-httpd-php5-cgi .html
12赞 tony 3/9/2013 #4

在My Godaddy Server中,以下代码有效

Options +ExecCGI
AddType application/x-httpd-php .php .html
AddHandler x-httpd-php5 .php .html

评论

14赞 Pacerier 8/11/2015
我认为提到“Godaddy”会把你从第一名的位置上抢走。
4赞 Mouhssine 4/28/2013 #5

我认为这是在 html 和 htm 页面上运行 php 脚本的最佳方式:

AddType application/x-httpd-php5 .html .htm
4赞 user4379513 12/20/2014 #6

通常,您应该添加:

Options +ExecCGI
 AddType application/x-httpd-php .php .html
 AddHandler x-httpd-php5 .php .html

但是,对于GoDaddy共享主机(php-cgi),您还需要添加以下行:

AddHandler fcgid-script .html
FCGIWrapper /usr/local/cpanel/cgi-sys/php5 .html

来源:在 Godaddy 上使用 HTACCESS 文件将 HTML 解析为 PHP

评论

0赞 Kaleem Sajid 6/28/2015
这也适用于hostgator共享主机。谢谢。
0赞 Mazen Elkashef 8/4/2016
我正在使用 godaddy,这是唯一对我有用的。其他人要么不起作用,要么下载HTML页面而不显示它!
1赞 Philipp Michael 7/3/2015 #7

使用@Marc-François方法,Firefox提示我下载html文件

最后,以下内容对我有用(同时使用):

AddType application/x-httpd-php .htm .html AddHandler x-httpd-php .htm .html

7赞 Amit Verma 12/1/2015 #8

您也可以使用 mod_rewrite 的 H 或 T 标志来强制所有.html文件被 php 处理程序解析:

使用 H(处理程序)标志:

 RewriteEngine on

RewriteRule \.(html|htm)$ - [H=application/x-httpd-php5]

使用 T (Type) 标志:

 RewriteEngine on

RewriteRule \.(html|htm)$ - [T=application/x-httpd-php5]

或者,您可以向要由 php 处理程序解析的管道 | 分隔的规则模式添加更多扩展

前任:

RewriteRule \.(html|htm|txt|foo)$ - [T=application/x-httpd-php5]

上面的示例将以 .html 、 .htm 、 .txt.foo 结尾的文件的 MIME 类型更改为 PHP。

注意:在某些服务器上,您必须将 php5 更改为 php 才能使此示例在处理程序字符串中工作:

改变它

[T=application/x-httpd-php5]

[T=application/x-httpd-php]
8赞 Dorad 3/27/2016 #9

您需要将以下行添加到 Apache 配置文件中:

AddType application/x-httpd-php .htm .html

您还需要另外两样东西:

  1. 允许覆盖

    在文件中(例如,在我的情况下),添加以下行:your_site.conf/etc/apache2/mods-available

    <Directory "<path_to_your_html_dir(in my case: /var/www/html)>">
        AllowOverride All
    </Directory>
    
  2. 启用重写模组

    在计算机上运行以下命令:

    sudo a2enmod rewrite 
    

    完成上述任何步骤后,您应重新启动 apache:

    sudo service apache2 restart
    
0赞 John x3 1/28/2017 #10
AddHandler application/x-httpd-php .php .html .htm
// or
AddType application/x-httpd-php .php .htm .html

评论

2赞 Jed Fox 1/28/2017
请使用编辑链接来解释此代码的工作原理,而不仅仅是提供代码,因为解释更有可能帮助未来的读者。另请参阅如何回答
9赞 th3pirat3 3/20/2018 #11

这是所有其他正确答案的版本:

如果找不到正确的处理程序,只需创建一个包含以下内容的 .php 文件:

<?php echo $_SERVER['REDIRECT_HANDLER']; ?>

并在浏览器中运行/打开此文件。

Output from the php code, copy this output

在 .htaccess 文件中使用此输出

在网站的根目录下创建一个 .htaccess 文件(通常是在 Linux 服务器上名为 public_html 或 htdocs 的文件夹)并添加以下行:

AddType [[THE OUTPUT FROM ABOVE FILE]] .html .htm

AddType application/x-httpd-php70 .html .htm

重要提示:

如果您看到空白页或Notice: Undefined index: REDIRECT_HANDLER

在以下位置尝试默认.htaccess

AddHandler application/x-httpd-php .html

评论

1赞 Shawn Rebelo 1/23/2020
完善!谢谢!
2赞 Fox 6/11/2020
有没有办法以另一种方式确定此处理程序?因为 $_SERVER['REDIRECT_HANDLER'] 在我的情况下返回 null :(
0赞 Wobbo 3/22/2018 #12

我正在使用在我的 Raspberry Pi 3 中运行的 PHP7.1。

在我最后添加的文件中:/etc/apache2/mods-enabled/php7.1.conf

AddType application/x-httpd-php .html .htm .png .jpg .gif
5赞 Mike Slaught 6/21/2018 #13

将 .html 文件作为 php 运行突然停止在我的 .htaccess 文件中工作。

Godaddy支持让我将其更改为:

AddHandler application/x-httpd-lsphp .html

评论

1赞 ashleedawg 12/23/2018
正确答案因 Web 服务器配置而异。在我的情况下,这也是正确的答案(而且我不和 GoDaddy 合作)......因此,如果您遇到问题,最好咨询您的虚拟主机。
2赞 sbrbot 6/4/2019
这取决于您的托管服务提供商是否使用 LSAPI (LiteSpeed) 版本的 PHP 处理程序,然后您必须使用而不是application/x-httpd-lsphpapplication/x-httpd-php
0赞 Extrange planet 6/17/2023
适用于我的 hostgator 共享服务器。谢谢
0赞 WEBjuju 9/12/2019 #14

Dreamhost 服务器上,您可以参考此页面,在撰写本文时,该页面表明您可以将以下内容用于带有 FastCGI 的 php 7.2:

AddHandler fcgid-script .html
FcgidWrapper "/dh/cgi-system/php72.cgi" .html

或者,如果您使用的是 php5 cgi(不是 FastCGI):

AddHandler php5-cgi .html
0赞 Victor 11/21/2019 #15

这里发布的答案都不适合我。

就我而言,问题是,一方面,.conf文件(/etc/apache2/sites-available/default-ssl.conf或/etc/apache2/sites-available/000-default.conf)不包含站点目录的指令,这导致.htaccess未被处理。要解决此问题,请添加:AllowOverride All

<Directory /var/www/html/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

另一方面,问题是 .htaccess 是由 root 用户创建的,因此 apache 用户无法读取它。因此,更改文件所有者肯定解决了问题:

chown www-data:www-data .htaccess
0赞 Adam Winter 1/23/2020 #16

首先,阅读以下内容:https://httpd.apache.org/docs/current/howto/htaccess.html#when

然后在这里阅读我的帖子: https://stackoverflow.com/a/59868481/10664600

sudo vim /etc/httpd/conf/httpd.conf

评论

0赞 Markus 1/23/2020
答案应包含..好吧,答案,而不仅仅是链接它可能被写成:)
0赞 Adam Winter 1/24/2020
如果您将某个问题的答案复制并粘贴到有人提出相同问题的任何地方,这里的版主将删除其中一些答案,并告诉您发布指向最佳问题的链接。
0赞 NoGamer TL 10/7/2021 #17

有时它不起作用,如果你只是将.htaccess文件添加到目录中。就我而言,我还更改了 apache2 配置中的一个条目。

sudo nano /etc/apache2/apache2.conf

...

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

修改:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

之后,您只需要重新启动 apache2-service:

sudo systemctl restart apache2

这对我有用。

0赞 Jaydeep Mor 3/24/2022 #18

这将对任何人有所帮助,

RewriteEngine on
RewriteRule ^(.+)\.html$ $1.php [L]

数字海洋

谢谢@FlamberHansen。

0赞 Miro 2/2/2023 #19

如果你在 Plesk 上运行 PHP 作为 Apache 提供的 FPM 应用程序,这篇文章对我有用:

转到“域”> example.com >“PHP 设置”,并将以下行添加到“其他配置指令”字段中:

[php-fpm-pool-settings]
security.limit_extensions = .php .phar .html .inc

.ht访问

<Files ~ .(?i:inc|html|htm)$>
SetHandler proxy:unix:///var/www/vhosts/system/EXAMPLE.com/php-fpm.sock|fcgi://127.0.0.1:9000
</Files>