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

PhpHtmlApache.Htaccess

Php Problem Overview


I need to run all of my .html files as .php files and I don't have time to change all of the links before our presentation tomorrow. Is there any way to "hack" this with my Apache server?

Php Solutions


Solution 1 - Php

Create a .htaccess file at the root of your website and add this line:

[Apache2 @ Ubuntu/Debian: use this directive]

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

Or, from comment below:

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

If your are running PHP as CGI (probably not the case), you should write instead:

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

Solution 2 - Php

In My Godaddy Server the following code worked

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

Solution 3 - Php

This is in edition to all other right answers:

If you are not able to find the correct Handler, Simply create a .php file with the following contents:

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

and run/open this file in browser.

Output from the php code, copy this output

Use this output in .htaccess file

Create a .htaccess file at the root of your website(usually a folder named public_html or htdocs on linux servers) and add this line:

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

Example

AddType application/x-httpd-php70 .html .htm
Important Note:

If you see blank page or Notice: Undefined index: REDIRECT_HANDLER

Try default in .htaccess

AddHandler application/x-httpd-php .html

Solution 4 - Php

You may also use the H or T flag of mod_rewrite to force all .html files to be parsed by php handler :

using H (Handler) flag:

 RewriteEngine on

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

using T (Type) flag :

 RewriteEngine on

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

Or you can add more extensions to the rule pattern seprated by a pipe | that you want to be parsed by php handler

ex :

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

the example above will change the mime type of files that end with .html , .htm , .txt , .foo to php.

Note : on some servers you will have to change php5 to php to get this example to work in handler string:

Change it

[T=application/x-httpd-php5]

to

[T=application/x-httpd-php]

Solution 5 - Php

You need to add the following line into your Apache config file:

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

You also need two other things:

  1. Allow Overridding

In your_site.conf file (e.g. under /etc/apache2/mods-available in my case), add the following lines:

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

2. Enable Rewrite Mod

Run this command on your machine:

	sudo a2enmod rewrite 

After any of those steps, you should restart apache:

	sudo service apache2 restart

Solution 6 - Php

For anyone out there still having trouble,

try this (my hosting was from Godaddy and this is the only thing that worked for me among all the answers out there.

AddHandler x-httpd-php5-cgi .html

Solution 7 - Php

I think this is the best way to run php script on html and htm pages:

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

Solution 8 - Php

Normally you should add:

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

However for GoDaddy shared hosting (php-cgi), you need to add also these lines:

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

Source: Parse HTML As PHP Using HTACCESS File On Godaddy.

Solution 9 - Php

Running .html files as php stopped working all of a sudden in my .htaccess file.

Godaddy support had me change it to:

AddHandler application/x-httpd-lsphp .html

Solution 10 - Php

here put this in your .htaccess

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

more info on this page

Solution 11 - Php

Using @Marc-François approach Firefox prompted me to download the html file

Finally the following is working for me (using both):

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

Solution 12 - Php

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

Solution 13 - Php

I'm using PHP7.1 running in my Raspberry Pi 3.

In the file /etc/apache2/mods-enabled/php7.1.conf I added at the end:

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

Solution 14 - Php

On Dreamhost Servers you can refer to this page that at time of writing indicates you may use the following for php 7.2 with FastCGI:

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

Or if you are using php5 cgi (not FastCGI):

AddHandler php5-cgi .html

Solution 15 - Php

None of the answers posted here worked for me.

In my case the problem was, by the one hand, that the .conf file (/etc/apache2/sites-available/default-ssl.conf or /etc/apache2/sites-available/000-default.conf) did not contain the directive AllowOverride All for the site directory, which caused the .htaccess to not been processed. To solve this, add:

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

On the other hand, the problem was that the .htaccess was created by the root user, and therefore the apache user could not read it. So, changing the file owner solved definitely the problem:

chown www-data:www-data .htaccess

Solution 16 - Php

First, read this: https://httpd.apache.org/docs/current/howto/htaccess.html#when

Then read my post here: https://stackoverflow.com/a/59868481/10664600

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

Solution 17 - Php

Sometimes it doesn't work, if you just add the .htaccess file to the directory. In my case, I also changed an entry in the apache2 configuration.

sudo nano /etc/apache2/apache2.conf

...

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

Modification:

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

After that you only must restart the apache2-service:

sudo systemctl restart apache2

This worked for me.

Solution 18 - Php

This would help anyone,

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

Digitalocean

Thanks @FlamberHansen.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMichael NovelloView Question on Stackoverflow
Solution 1 - PhpMarc-FrançoisView Answer on Stackoverflow
Solution 2 - PhptonyView Answer on Stackoverflow
Solution 3 - Phpth3pirat3View Answer on Stackoverflow
Solution 4 - PhpAmit VermaView Answer on Stackoverflow
Solution 5 - PhpDoradView Answer on Stackoverflow
Solution 6 - PhpilightView Answer on Stackoverflow
Solution 7 - PhpMouhssineView Answer on Stackoverflow
Solution 8 - Phpuser4379513View Answer on Stackoverflow
Solution 9 - PhpMike SlaughtView Answer on Stackoverflow
Solution 10 - PhpandrewkView Answer on Stackoverflow
Solution 11 - PhpPhilipp MichaelView Answer on Stackoverflow
Solution 12 - PhpJohn x3View Answer on Stackoverflow
Solution 13 - PhpWobboView Answer on Stackoverflow
Solution 14 - PhpWEBjujuView Answer on Stackoverflow
Solution 15 - PhpVictorView Answer on Stackoverflow
Solution 16 - PhpAdam WinterView Answer on Stackoverflow
Solution 17 - PhpNoGamer TLView Answer on Stackoverflow
Solution 18 - PhpJaydeep MorView Answer on Stackoverflow