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

Posted

技术标签:

【中文标题】使用 .htaccess 使所有 .html 页面作为 .php 文件运行?【英文标题】:Using .htaccess to make all .html pages to run as .php files? 【发布时间】:2011-06-08 21:39:29 【问题描述】:

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

【问题讨论】:

虽然这不是您问题的直接答案,但使用 sed 或任何好的 IDE 将允许您在整个目录/项目中查找和替换。此外,您可以在 Linux 上轻松地批量重命名文件。 是的,但是如果您使用 sed 重命名文件,您可能会得到许多断开的链接。当然,您也可以尝试更改您网站中的所有链接,但也有来自 Internet 各地的链接可能指向您的网站。 【参考方案1】:

如果您只是将 .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

这对我有用。

【讨论】:

【参考方案2】:

首先,请阅读:https://httpd.apache.org/docs/current/howto/htaccess.html#when

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

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

【讨论】:

答案应该包含..答案,而不仅仅是链接到可能写的地方:) 如果您将某个问题的答案复制并粘贴到任何人提出相同问题的任何地方,这里的版主将删除其中的一些并告诉您发布指向最佳答案的链接。【参考方案3】:

此处发布的所有答案均不适合我。

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

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

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

chown www-data:www-data .htaccess

【讨论】:

【参考方案4】:

在Dreamhost Servers 上,您可以参考this page,在撰写本文时表明您可以将以下内容用于带有FastCGI 的php 7.2:

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

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

AddHandler php5-cgi .html

【讨论】:

【参考方案5】:

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

Godaddy 支持让我将其更改为:

AddHandler application/x-httpd-lsphp .html

【讨论】:

正确答案因网络服务器配置而异。在我的情况下,这也是正确的答案(我使用 GoDaddy)...所以如果您遇到问题,最好与您的网络托管服务商联系。 这取决于您的托管服务提供商是否使用 LSAPI (LiteSpeed) 版本的 PHP 处理程序,然后您必须使用 application/x-httpd-lsphp 而不是 application/x-httpd-php【参考方案6】:

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

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

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

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

在 .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

【讨论】:

完美!谢谢! 有没有办法以另一种方式确定这个处理程序?因为在我的情况下 $_SERVER['REDIRECT_HANDLER'] 返回 null :(【参考方案7】:

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

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

AddType application/x-httpd-php .html .htm .png .jpg .gif

【讨论】:

【参考方案8】:

在您网站的根目录创建一个 .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 

【讨论】:

我必须在类型的末尾添加5 才能使其工作,即AddType application/x-httpd-php5 .html .htm(CentOS 运行 PHP 5.3) 这对我不起作用。它使 Firefox 想要下载 html 文件并显示它。 @LeeBlake 我遇到了同样的问题。这有什么好运气吗? 导致文件正在下载 @AndreiKrasutski 做到了。仍在下载。【参考方案9】:

通常你应该添加:

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

来源:Parse HTML As PHP Using HTACCESS File On Godaddy。

【讨论】:

这也适用于 hostgator 共享主机。谢谢。 我正在使用 godaddy,这是唯一对我有用的。其他人要么不工作,要么下载html页面而不显示!【参考方案10】:

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

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

你还需要另外两件事:

    允许覆盖

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

    <Directory "<path_to_your_html_dir(in my case: /var/www/html)>">
        AllowOverride All
    </Directory>
    

    启用重写模组

    在你的机器上运行这个命令:

    sudo a2enmod rewrite 
    

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

    sudo service apache2 restart
    

【讨论】:

【参考方案11】:
AddHandler application/x-httpd-php .php .html .htm
// or
AddType application/x-httpd-php .php .htm .html

【讨论】:

请使用edit链接来解释这段代码是如何工作的,不要只给出代码,因为解释更有可能帮助未来的读者。另见How to Answer。 source【参考方案12】:

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

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

 RewriteEngine on

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

使用 T(类型)标志:

 RewriteEngine on

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

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

前:

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

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

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

改变它

[T=application/x-httpd-php5]

[T=application/x-httpd-php]

【讨论】:

【参考方案13】:

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

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

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

【讨论】:

【参考方案14】:

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

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

【讨论】:

【参考方案15】:

在我的 Godaddy 服务器中,以下代码有效

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

【讨论】:

我认为提到“Godaddy”会让你失去第一个位置。【参考方案16】:

对于那些仍然有麻烦的人,

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

AddHandler x-httpd-php5-cgi .html

【讨论】:

【参考方案17】:

这里把它放在你的 .htaccess 中

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

更多信息page

【讨论】:

以上是关于使用 .htaccess 使所有 .html 页面作为 .php 文件运行?的主要内容,如果未能解决你的问题,请参考以下文章

htaccess 将除一页之外的所有页面从 html 重定向到 php

使用 .htaccess 将所有子域和子目录重定向到索引页面

.htaccess 导致下载所有页面

HTACCESS-将所有页面重定向到一个页面

.htaccess 规则在用户使用站点时使站点脱机

HTACCESS-将所有其他用户重定向到即将到来的页面