Htaccess html как php
Перейти к содержимому

Htaccess html как php

  • автор:

How to remove .php, .html, .htm extensions with .htaccess

I recently wanted to remove the extensions from my website, in order to make the URLs more user and search engine friendly. I stumbled across tutorials on how to remove the .php extension from a PHP page. What about the .html ? I wanted to remove those as well! In this tutorial I’ll show you how to do that easily, by editing the .htaccess file.

What is an .htaccess file

An .htaccess file is a simple ASCII file that you create with a text editor like Notepad or TextEdit. The file lets the server know what configuration changes to make on a per-directory basis.

Please note that .htaccess is the full name of the file. It isn’t file.htaccess , it’s simply .htaccess .

.htaccess files affect the directory in which they are placed in and all children (sub-directories). For example if there is one .htaccess file located in your root directory of yoursite.com , it would affect yoursite.com/content/ , yoursite.com/content/images/ , and so on…

It is important to remember that this can be bypassed. If you don’t want certain .htaccess commands to affect a specific directory, place a new .htaccess file within the directory you don’t want to be affected with the changes, and remove the specific command(s) from the new file.

Features

With an .htaccess file you can:

  • Redirect the user to different page
  • Password protect a specific directory
  • Block users by IP
  • Preventing hot-linking of your images
  • Rewrite URLs
  • Specify your own Error Documents

In this tutorial we’ll be focusing only on rewriting URLs.

Removing Extensions

To remove the .php extension from a PHP file for example yoursite.com/wallpaper.php to yoursite.com/wallpaper you have to add the following code inside the .htaccess file:

RewriteEngine On RewriteCond % !-f RewriteRule ^([^\.]+)$ $1.php [NC,L] 

If you want to remove the .html extension from a html file for example yoursite.com/wallpaper.html to yoursite.com/wallpaper you simply have to change the last line from the code above, to match the filename:

RewriteRule ^([^\.]+)$ $1.html [NC,L] 

That’s it! You can now link pages inside the HTML document without needing to add the extension of the page. For example:

Adding a trailing slash at the end

I received many requests asking how to add a trailing slash at the end, for example: yoursite.com/page/

Ignore the first snippet and insert the code below. The first four lines deal with the removal of the extension and the following, with the addition of the trailing slash and redirecting.

RewriteEngine On RewriteCond % !-f RewriteRule ^([^/]+)/$ $1.php RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php RewriteCond % !-f RewriteCond % !-d RewriteCond % !(\.[a-zA-Z0-9]|/)$ RewriteRule (.*)$ /$1/ [R=301,L] 

Link to the HTML or PHP file the same way as shown above. Don’t forget to change the code if you want it applied to an HTML file instead of PHP.

Some people asked how you can remove the extension from both HTML and PHP files. I don’t have a solution for that. But, you could just change the extension of your HTML file from .html or .htm to .php and add the code for removing the .php extension.

Conclusion

For those who are not so experienced with .htaccess files there is an online tool for creating them. It’s useful for novice users to get started, and easy to use.

Updates

Attention GoDaddy users: In order to remove the extensions you need to enable MultiViews before. The code should look like this:

Options +MultiViews RewriteEngine On RewriteCond % !-d RewriteCond % !-f RewriteRule ^([^\.]+)$ $1.php [NC,L] 

If you’re worried that search engines might index these pages as duplicate content, add a meta tag in the of your HTML file:

Включить выполнение PHP кода в .html файлах

Включить выполнение PHP кода в .html файлах

На многих хостингах по умолчанию отключено выполнение PHP скриптов в файлах .html, .htm, .tpl. Чтобы это исправить достаточно добавить директиву AddType application/x-httpd-php в файл .htaccess в корне сайта или директории с нужными файлами.

AddType application/x-httpd-php .php .htm .html .tpl
Или:
 AddType application/x-httpd-php .php AddType application/x-httpd-php .htm AddType application/x-httpd-php .html AddType application/x-httpd-php .tpl 
Метод с AddHandler:
AddHandler application/x-httpd-php .php .htm .html .tpl
Метод с SetHandler:
 SetHandler application/x-httpd-php 

.htaccess PHP

.htaccess (с точкой в начале имени) — это файл-конфигуратор Apache-серверов, который дает возможность конфигурировать работу сервера в отдельных директориях (папках), не предоставляя доступа к главному конфигурационному файлу (apache/conf/httpd.conf). Например, устанавливать права доступа к файлам в директории, менять названия индексных файлов, самостоятельно обрабатывать ошибки Apache, перенаправляя посетителей на специальные страницы ошибок. .htaccess представляет собой обычный текстовый документ, расширение которого htaccess. Данный файл обычно находится в корне сайта, однако Вы можете создавать и дополнительные .htaccess-файлы для различных директорий Вашего сайта.

Mod_rewrite — модуль, используемый веб-серверами для преобразования URL’ов.

Если вы хотите вести логи всех операций, выполненных с помощью mod_rewrite, можно активировать это с помощью следующей записи в httpd.conf:

RewriteLog /usr/local/apache/logs/mod_rewrite.log RewriteLogLevel 1

Директивы модуля Mod_rewrite

Наиболее часто используемые параметры

% Строка запроса (без доменного имени, и GET параметров), пример «/server/htaccess/»
% Доменное имя, например «max22.ru»
% Строка GET параметров

Варианты реализации Редиректа с помощью файла .htaccess

  1. Простой редирект:
Redirect 301 / http://www.domainname.ru/
redirect /secret http://www.site.ru/nosecret
# с использованием регулярного выражения RedirectMatch 301 .* http://www.site.ru/?from=htmlweb.ru
SetEnvIf REMOTE_ADDR 192.152.37.125 REDIR="redir" RewriteCond % redir RewriteRule ^/$ /user.php
RewriteEngine On RewriteRule !.(gif|jpg)$ index.php
Options +FollowSymLinks RewriteEngine on RewriteCond % ^yourdomain\.ru RewriteRule ^(.*)$ http://www.yourdomain.ru/$1 [R=permanent,L]
RedirectMatch 301 (.*) http://www.yourdomain.ru$1 Прописывается в файле .htaccess.

(.*) RedirectMatch фактически соответствует регулярным образцам выражения после доменного имени. Таким образом, нельзя выполнить соответствие образца на ^/yourdomain.ru. Однако, можно преобразовать страницы с использованием .html расширения к файлам того же самого названия, но с .php расширением:

RedirectMatch 301 (.*)\.html$ http://www.yourdomain.ru$1.php

Если необходимо сделать различное перенаправление для отдельных страниц, можно использовать следующее:

RedirectMatch Permanent ^/html/resources.html$ http://www.newdomain.com/resources.php RedirectMatch Permanent ^/html/other_page.html$ http://www.newdomain.com/other_page.php RedirectMatch Permanent ^/(.*)$ http://www.newdomain.com/
RewriteEngine on RewriteRule ^product/([^/\.]+)/?$ product.php?id=$1 [L]

В следующем примере преобразуем www.site.ru/script.php?product=123 в www.site.ru/cat/product/123/:

RewriteRule cat/(.*)/(.*)/$ /script.php?$1=$2
header("HTTP/1.1 301 Moved Permanently"); header("Location: http://www.newdomain.ru/newdir/newpage.htm"); exit();
RewriteRule ^superdiscount(.*)$ /hot-offers.php [L,R=301]
RewriteRule ^superdiscount/my-ebook.html /hot-to-make-million.html [L,R=301] RewriteRule ^superdiscount(.*)$ /hot-offers.php [L,R=301]
RewriteRule ^article.jsp?id=(.*)$ /latestnews.htm [L,R=301]
RewriteRule ^/product-(.*)_([0-9]+).php /redirectold.php?productid=$2

затем создаем PHP файл redirectold.php, который будет поддерживать 301 редирект:

 else < while($row = mysql_fetch_array($result)) < $ret = 'http://www.yoursite.com/'. $row["new_url"]; >> mysql_close($s); return $ret; > $productid = $_GET["productid"]; $url = getRedirectUrl($productid); header("HTTP/1.1 301 Moved Permanently"); header("Location: $url"); exit(); ?>
RewriteEngine on # оглашаем, что хотим использовать mod_rewrite RewriteCond % ^www\.(.*) [NC] RewriteRule ^/?(.*) http://%1/$1 [L,R=permanent]
RewriteCond % ^.*/index.php RewriteRule ^(.*)index.php$ http://%/$1 [R=301,L]
AddHandler application/x-httpd-php .html

Этот прием можно использовать и для других расширений файлов:

AddHandler application/x-httpd-php .xml AddHandler application/x-httpd-php .asp

Редиректы в зависимости от времени

Когда нужно применять уловки типа содержания, зависящего от времени, масса вебмастеров все ещё используют CGI скрипты, которые производят редиректы на специальные страницы. Как это может быть сделано через mod_rewrite?

Есть много переменных названных TIME_xxx для условий редиректа. В связке со специальными лексикографическими образцами для сравнения STRING и =STRING мы можем производить редиректы, зависящие от времени:

RewriteEngine on RewriteCond %% >0700 RewriteCond %% 

Это выдает содержимое foo.day.html при запросе URL foo.html с 07:00 до 19:00 а в оставшееся время содержимое foo.night.html.

Запрещение доступа в конкретную директорию

  1. для всех ко всем файлам в директории:
deny from all
 deny from all 
order deny,allow deny from all allow from 192.152.37.125

Доступ в данную директорию будет разрешён только пользователю с ip 192.152.37.125. А если хотите наоборот, запретить отдельным ip пользователям доступ к вашему сайту, то пропишем следующие строчки:

 order allow,deny allow from all deny from 192.152.37.125 deny from 123.456.177 
Options -Indexes
 deny from all 

Запрещен доступ к файлам с расширением *.inc, *.conf и *.cfg. Хотя директива, по умолчанию, не работает с регулярными выражениями, но их можно включить поставив символ тильды(~) в опциях директивы. Синтаксис следующий: [тильда] [пробел] [далее_все_без_пробелов] Чтобы блокировать этот доступ, запишем следующее:

RewriteRule ^.htaccess$ - [F]

Определение кодировки

Определение кодировки, в которой сервер "отдает" файлы
AddDefaultCharset windows-1251

варианты: KOI8-R, UTF-8, Windows-1251

Определение кодировки на загружаемые файлы
CharsetSourceEnc windows-1251

Установка пароля на директорию с помощью .htaccess

Для установки пароля на директорию можно воспользоваться системой базовой авторизации, предусмотренной в веб-сервере Apache. Создаем в каталоге, к которому хотим ограничить доступ по паролю, файл .htaccess с такими директивами:

AuthType Basic AuthName "Some Name" AuthUserFile /www/some_login/www/htdocs/some_dir/.htpasswd require valid-user

Путь /www/some_login/www/htdocs/some_dir/.htpasswd обозначает полный путь к файлу паролей на диске нашего сервера. Если, например, вы поместите файл .htpasswd (в нем будут пароли) в домашний каталог, куда вы попадаете, зайдя на сервер по FTP, то путь к этому файлу будет иметь вид /www/some_login/www/htdocs/some_dir/.htpasswd, где some_login - Ваш логин.

В директиве AuthUserFile указываем абсолютный путь к файлу с логинами/паролями, который мы создадим чуть позже. Если вы создаете файл .htaccess на своем компьютере, а не сразу на сервере используя текстовый редактор, обратите особое внимание на то, что .htaccess должен передаваться по FTP строго в текстовом (ASCII) режиме.

Создаем файл паролей. Файл с паролями должен содержать строки вида login:password. Пароль должен быть зашифрован с использованием алгоритма MD5. Один из способов создать такой файл - воспользоваться программой, входящей в поставку Apache - htpasswd (на нашем сервере она находится в каталоге /usr/local/apache/bin, полный путь - /usr/local/apache/bin/htpasswd).

Рассмотрим, как создать файл паролей в unix shell прямо на сервере. Зайдем в shell и будем выполнять следующие команды:

htpasswd -mbc .htpasswd user1 7B1safkir

- создаем новый файл .htpasswd, в который добавляем запись для пользователя user1 с паролем, указанным в командной строке.

htpasswd .htpasswd user2

- добавляем в уже существующий файл .htpasswd пользователя user2, а пароль вводим вручную в ответ на соответствующий запрос программы.

После окончания заведения всех логинов файл нужно загрузить на сервер.

Задаем собственные страницы ошибок

Задать собственную страницу ошибок можно следующим образом:

ErrorDocument 404 http://www.site.ru/404.php

IE игнорирует страницы размером меньше 512 байт.

Индексация директорий и поддиректорий

Чтобы избежать индексации поисковыми системами директорий и поддиректорий, необходимо прописать такую строку, к примеру:

DirectoryIndex index.php

Эта директива задает файл, который будет вызван при обращении к директории без указания имени файла.

Можно указать несколько индексных страниц. При запросе каталога они будут искаться в том порядке, в котором перечислены в директиве DirectoryIndex. Если не будет найден файл index.html, то будет произведен поиск файла index.php и т.д.

DirectoryIndex index.html index.php index.shtml

Лично я предпочитаю переадресовывать с пустых директорий либо на главную страницу сайта, либо на какую-либо другую подходящую страницу. Например, директорию www.site.ru/pic/ можно переадресовать на www.site.ru.

Защита изображений от скачивания

Очень часто бывает, что веб-мастера нагло копируют контент с Вашего сайта вместе с рисунками, причем рисунки подгружаются с Вашего же сервера. Это создает лишний трафик, что, зачастую, приводит к ряду проблем. Как же защититься от таких веб-мастеров и не помешать поисковым роботам индексировать изображения? Все просто:

RewriteEngine on RewriteCond % . RewriteCond % !^http://([^.]+\.)?site\. [NC] RewriteCond % !google\. [NC] RewriteCond % !search\?q=cache [NC] RewriteCond % !msn\. [NC] RewriteCond % !yahoo\. [NC] RewriteCond % !^/hotlinker\.gif$ RewriteRule \.(gif|jpg|png)$ /hotlinker.gif [NC,L]

hotlinker.gif - изображение, которое будет отображаться, вместо истинных изображений. Рекомендую в этом изображении отобразить Ваш логотип и ссылку на Ваш сайт.

Еще один варинат запрета доступа к картинкам с неразрешенных сайтов:

SetEnvIfNoCase Referer "^$" local_ref=1 SetEnvIfNoCase Referer "^http://(www\.)?htmlweb\.ru" local_ref=1 SetEnvIfNoCase Referer "^http://(www\.)?images\.yandex\.ru" local_ref=1 SetEnvIfNoCase Referer "^http://(www\.)?hghltd\.yandex\.com" local_ref=1 Order Allow,Deny Allow from env=local_ref 

Поисковые машини и разного рода сканеры создают коллосальный трафик на вашем сайте. Нижеприведенный блок кода позволит запретить доступ ботам на сайт.

RewriteCond % (Googlebot|Slurp|spider|Twiceler|heritrix| Combine|appie|boitho|e-SocietyRobot|Exabot|Nutch|OmniExplorer| MJ12bot|ZyBorg/1|Ask\ Jeeves|AskJeeves|ActiveTouristBot| JemmaTheTourist| agadine3|BecomeBot|Clustered-Search-Bot| MSIECrawler|freefind|galaxy|genieknows|INGRID|grub-client| MojeekBot|NaverBot|NetNose-Crawler|OnetSzukaj|PrassoSunner| Asterias\ Crawler|T-H-U-N-D-E-R-S-T-O-N-E|GeorgeTheTouristBot| VoilaBot|Vagabondo|fantomBro wser|stealthBrowser|cloakBrowser| fantomCrew\ Browser|Girafabot|Indy\ Library|Intelliseek|Zealbot| Windows\ 95|^Mozilla/4\.05\ \[en\]$|^Mozilla/4\.0$) [NC] RewriteRule ^(.*)$ - [F] # RewriteCond % ^Mozilla.* [NC,OR] RewriteCond % ^Opera.* [NC,OR] RewriteCond % ^Firefox.* [NC,OR] RewriteCond % ^Netscape.* [NC] RewriteRule ^(.*)$ - [L] RewriteRule ^(.*)$ - [F]

Отслеживание обращений к файлу robots.txt

Чтобы иметь больше информации о посещении поисковиков, полезно иметь подробную информацио об обращении к файлу robots.txt Для того, чтобы оганизовать это, в '.htaccess' должны быть следующие записи:

RewriteEngine on Options +FollowSymlinks RewriteBase / RewriteRule ^robots.txt$ /robot.php?%

Теперь при запросе файла 'robots.txt' наш RewriteRule переадресует посетителя (робота) к обрабатывающему запросы скрипту robot.php. Кроме того, переменная передается скрипту, которая будет обработана в соответствии с вашими нуждами. 'REQUEST_URI' определяет имя запрашиваемого файла. В данном примере это - 'robots.txt'. Скрипт прочтет содержание 'robots.txt' и отправит его web-браузеру или роботу поискового сервера. Таким образом, мы можем считать хиты посетителей и вести лог-файлы.

PHPSESSID

Для отключения добавления PHPSESSID к URL вставьте в начало index.php:

ini_set("session.use_trans_sid", 0);

Либо в .htaccess пропишите:

php_flag session.use_trans_sid Off

Директивы кеширования

Кэширование для всех типов файлов по времени доступа

ExpiresActive on ExpiresDefault "access plus 600 seconds"

Кэширование для всех типов файлов по времени изменения

ExpiresActive on ExpiresDefault "modification plus 600 seconds"

Кэширование для определённых типов файлов

ExpiresByType text/css "modification plus 600 seconds" ExpiresByType image/jpeg "modification plus 600 seconds" ExpiresByType image/gif "modification plus 600 seconds" ExpiresByType image/x-ico "modification plus 600 seconds" ExpiresByType image/png "modification plus 600 seconds"

Запрет кеширования с помощью сервера Apache

Откройте файл конфигурации сервера Apache httpd.conf и раскомментируйте следующие строчки:

LoadModule expires_module modules/mod_expires.so LoadModule headers_module modules/mod_headers.so . AddModule mod_expires.c AddModule mod_headers.c

Впишите в .htaccess следующее:

# Запрещение кеширования в этой папке # Необходимо включение модулей # mod_headers.c и mod_expires.c # # Заголовок Cache-Control Header append Cache-Control "no-store, no-cache, must-revalidate" # Заголовок Expires ExpiresActive On ExpiresDefault "now" 

Необходимые заголовки будут передаваться автоматически, и специально их писать в PHP уже не нужно - кэш уже выключен!

Кеширование с помощью файла .htaccess

# Разрешение кеширования в этой папке # Необходимо включение модулей # mod_headers.c и mod_expires.c # ExpiresActive on #ExpiresDefault "access plus 1 hours" #ExpiresDefault "access plus 10 years" ExpiresDefault "access plus 1 month" ExpiresByType text/cache-manifest "access plus 0 seconds" ExpiresByType text/html "access plus 0 seconds" ExpiresByType text/xml "access plus 0 seconds" ExpiresByType application/xml "access plus 0 seconds" ExpiresByType application/json "access plus 0 seconds" ExpiresByType application/rss+xml "access plus 1 month" ExpiresByType image/x-icon "access plus 1 week" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType video/ogg "access plus 1 year" ExpiresByType audio/ogg "access plus 1 year" ExpiresByType audio/mp3 "access plus 1 year" ExpiresByType video/mp4 "access plus 1 year" ExpiresByType video/webm "access plus 1 year" ExpiresByType text/x-component "access plus 1 month" ExpiresByType font/truetype "access plus 1 year" ExpiresByType font/opentype "access plus 1 year" ExpiresByType application/x-font-woff "access plus 1 year" ExpiresByType image/svg+xml "access plus 1 month" ExpiresByType application/vnd.ms-fontobject "access plus 1 year" ExpiresByType text/css "access plus 2 months" ExpiresByType application/javascript "access plus 2 months" ExpiresByType text/javascript "access plus 2 months" Header append Cache-Control "public" 

Кеширование javascript файлов с помощью файла .htaccess

 ExpiresDefault "access plus 3 days" 

Будьте осторожны при кешировании, т.к. при изменении файла, пользователь может получить новый вариант только через 3 дня!

Как заставить html-страницы обрабатывать php-код?

Пропишите в своем файле .htaccess следующие строки:

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

Как разместить несколько сайтов на одном виртуальном хостинге?

Чтобы разместить два или более сайтов на одном виртуальном хостинге, вопреки отведенному вам тарифным планом количеству доменов необходимо в файле ".htaccess" прописать следующие строки:

RewriteEngine On RewriteRule ^newdirectory/ - [L] RewriteCond % (www.)?newdomain.ru [NC] RewriteRule (.*) newdirectory/$1 [L]

Где:
newdirectory/ - папка, в которой будет лежать второй сайт
newdomain.ru - домен, для которого мы делаем перенаправление

Обратите внимание, что при этом у Вас будет единый почтовый аккаунт. Т.е. если, у Вас существует ящик admin@domain.ru, то после подключения домена newdomain.ru у ящика admin@domain.ru появляется второе имя - admin@newdomain.ru. А при создании любого нового ящика (например info), ему автоматически присваиваются два имени - info@domain.ru и info@newdomain.ru.

Поиск страниц больше чем в одном каталоге

Иногда необходимо позволить веб-серверу искать страницы больше чем в одном каталоге.

RewriteEngine on # во-первых попытаемся найти это в указанном месте/. # . и если нашли то заканчиваем поиск: RewriteCond /your/docroot/dir1/% -f RewriteRule ^(.+) /your/docroot/dir1/$1 [L] # во-вторых - попытаемся найти это в pub/. # . и если нашли то заканчиваем поиск: RewriteCond /your/docroot/dir2/% -f RewriteRule ^(.+) /your/docroot/dir2/$1 [L] # иначе продолжаем для других директив RewriteRule ^(.+) - [PT]

Виртуальные хосты пользователей

Если Вы хотите предоставлять адреса www.subdomain.domain.ru для страниц пользователей, Вы можете использовать следующий набор правил для преобразования http://www.subdomain.domain.ru/path во внутренний путь /home/subdomain/path:

RewriteEngine on RewriteCond % ^www\.[^.]+\.ru$ RewriteRule ^(.+) %$1 [C] RewriteRule ^www\.([^.]+)\.ru(.*) /home/$1$2

Повреждаются файлы при загрузке на сервер

Если при передаче файлов через формы (при указанном enctype="multipart/form-data") бинарные данные повреждаются, пропишите в /cgi-bin/.htaccess директиву:

CharsetRecodeMultipartForms Off.

Ошибка загрузки SWF файлов.
Ошибки при обращении к страницам, содержащим ключевые слова,
типа $_REQUEST

Такое может происходить из-за установленного модуля в Apache. По умолчанию он блокирует в запросах строки с SQL аргументами и другими потенциально опасными командами.

Возможные сообщения об ошибке:

You don't have permission to access /adm/index.php on this server. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

Запрос небезопасен и был отвергнут.

Добавьте в .htaccess

 SecFilterEngine Off SecFilterScanPOST Off 

"POST /wp-admin/async-upload.php HTTP/1.1" 406 354 "-" "Shockwave Flash"

можно снять защиту только на загрузку файлов на сервер:

  SecFilterEngine Off SecFilterScanPOST Off 

Оптимально снимать защиту только с той папки, в которой это необходимо, не убирая защиту со всего сайта.

Переменные сервера

Это переменные вида %

где NAME_OF_VARIABLE может быть строкой взятой из следующего списка:

HTTP заголовки: соединение & запрос:
HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT
REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
внутренние сервера: системные: специальные:
DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ

Эти переменные полностью соответствуют названным похожим образом MIME-заголовкам HTTP и переменным сервера Apache или полям struct tm систем Unix. Те, что являются для mod_rewrite специальными включают:

IS_SUBREQ - Будет содержать текст «true» если запрос выполняется в текущий момент как подзапрос, «false» в другом случае. Подзапросы могут быть сгенерированны модулями которым нужно иметь дело с дополнительными файлами или URI для того чтобы выполнить собственные задачи.

API_VERSION - Это версия API модуля Apache (внутренний интерфейс между сервером и модулем) в текущей сборке сервера, что определено в include/ap_mmn.h. API версия модуля соответствует используемой версии Apache (для версии Apache 1.3.14, к примеру это 19990320:10), однако это в основном интересно авторам модулей.

THE_REQUEST - Полная строка HTTP запроса отправленная браузером серверу (т.е., « GET /index.html HTTP/1.1 »). Она не включает какие-либо дополнительные заголовки отправляемые браузером.

REQUEST_URI - Ресурс, запрошенный в строке HTTP запроса.

REQUEST_FILENAME - Полный путь в файловой системе сервера к файлу или скрипту соответствующим этому запросу.

Примечания:
  1. Переменные SCRIPT_FILENAME и REQUEST_FILENAME содержат одинаковые значения, т.е. значение поля filename внутренней структуры request_rec сервера Apache. Первое имя – это просто широко известное имя переменной CGI, в то время как второе – это постоянная копия REQUEST_URI (содержащая значение поля uri структуры request_rec ).
  2. Есть специальный формат: % , где переменная может быть любой переменной окружения. Это ищется во внутренних структурах Apache и (если там нет) с помощью вызова getenv() из процесса Apache сервера.
  3. Есть специальный формат: % , где заголовок может быть любым именем HTTP MIME-заголовка. Это ищется в HTTP запросе. Пример: % значение HTTP заголовка « Proxy-Connection: ».
  4. Есть специальный формат % опережающих запросов, которые производятся внутренним (основанном на URL) подзапросом для определения конечного значения переменной. Используйте это, когда вы хотите использовать переменную для преобразований, которая реально определяется позднее, в какой-либо фазе API, и таким образом недоступна на данном этапе. Для примера, когда вы хотите преобразовать соответственно переменной REMOTE_USER из контекста сервера (файл httpd.conf ), вы должны использовать % , потому что эта переменная устанавливается в фазах авторизации, которые идут после фазы трансляции URL, в которой и работает mod_rewrite. С другой стороны, по причине реализации работы mod_rewrite в контексте каталога (файл .htaccess) через Fixup фазу API и из-за того, что фазы авторизации идут до этой фазы, вы просто можете там использовать % .
  5. Есть специальный формат: % , который создает внутренний (основанный на имени файла) подзапрос для определения конечного значения переменной. В основном это то же самое что и формат LA-U, приведенный выше.

Главная страница без дублирования

Обычно код главной страницы физически расположен в файле index.html или index.php, но сайт должен открываться по любому из запросов: yoursite.ru, yoursite.ru/index.html, www.yoursite.ru и www.yoursite.ru/index.html. Для поисковых систем это четыре разных URL! Если не настроить .htaccess верно, поисковик добавит в свой индекс четыре одинаковых страницы. Это признак некачественного сайта. Избежать этой проблемы можно с помощью такого кода в .htaccess:

Options +FollowSymLinks RewriteEngine on RewriteCond % ^yoursite.ru RewriteRule (.*) http://www.yoursite.ru/$1 [R=301,L] RewriteCond % ^[A-Z]\ /index\.html\ HTTP/ RewriteRule ^index\.html$ http://www.yoursite.ru/ [R=301,L]

Все страницы-дубли будут склеены редиректом с кодом 301 с главной страницей – http://www.yoursite.ru/.

Дубли страниц без слэша в конце URL

Чтобы предотвратить ситуацию с индексированием страниц www.yoursite.ru/about и www.yoursite.ru/about/ как разных, ставим следущий код:

Со страниц без слэша будет установлен редирект на «слэшевые».

RewriteCond % !-f RewriteCond % !(.*)/$ RewriteRule ^(.*)$ /$1/ [R=301,L]

Сохранение(загрузка) файлов вместо открытия

Многие видели, как при попытке скачать архив с расширением .rar браузер открывает его в виде простого текста из мешанины символов. Это значит, что на сервере сайта не настроено принудительное сохранение типов файлов, которые не должны открываться в браузере.

AddType application/octet-stream .rar .doc .mov .avi .pdf .xls .mp4

Сжатие отправляемых страниц

SetOutputFilter DEFLATE Header unset ETag FileETag None

Принудительная постановка замыкающего слеша

Следующий код всегда будет добавлять слеш в адрес URL вашего сайта, что хорошо помогает в области SEO сайта.

RewriteCond % /+[^\.]+$ RewriteRule ^(.+[^/])$ %/ [R=301,L]

Междоменное использование шрифтов для FireFox

При использовании встроенных шрифтов Firefox не позволяет брать их с внешних сайтов. Следующий код для файла .htaccess позволит обойти данное ограничение.

  #Замените yourdomain.com на адрес вашего блога Header set Access-Control-Allow-Origin "http://yourdomain.com" 

Выполнять PHP в файлах JavaScript

При разработке кода JavaScript иногда требуется использовать PHP в файлах .js, например, для получения данных из базы данных.

AddType application/x-httpd-php .js AddHandler x-httpd-php5 .js SetHandler application/x-httpd-php 

Разложить файлы robots.txt, sitemap.xml и т.п. в папки доменов

# Если есть запрашиваемый файл из корня сайта, в папке домена, то перенаправляем его туда RewriteCond %/domain/%/root% -f RewriteRule ^(.*)$ /domain/%/root/$1 [L]

Блокируем User Agents через .htaccess

Если вы столкнулись с проблемой, что какие-то типы User Agent нагружают ваш сервер ненужными запросами, то от них можно избавиться добавив в .htaccess следующие строчки:

SetEnvIfNoCase User-Agent "^Black Hole" bad_bot SetEnvIfNoCase User-Agent "^Titan" bad_bot SetEnvIfNoCase User-Agent "^WebStripper" bad_bot SetEnvIfNoCase User-Agent "^NetMechanic" bad_bot SetEnvIfNoCase User-Agent "^CherryPicker" bad_bot SetEnvIfNoCase User-Agent "^EmailCollector" bad_bot SetEnvIfNoCase User-Agent "^EmailSiphon" bad_bot SetEnvIfNoCase User-Agent "^WebBandit" bad_bot SetEnvIfNoCase User-Agent "^EmailWolf" bad_bot SetEnvIfNoCase User-Agent "^ExtractorPro" bad_bot SetEnvIfNoCase User-Agent "^CopyRightCheck" bad_bot SetEnvIfNoCase User-Agent "^Crescent" bad_bot SetEnvIfNoCase User-Agent "^Wget" bad_bot SetEnvIfNoCase User-Agent "^SiteSnagger" bad_bot SetEnvIfNoCase User-Agent "^ProWebWalker" bad_bot SetEnvIfNoCase User-Agent "^CheeseBot" bad_bot SetEnvIfNoCase User-Agent "^Teleport" bad_bot SetEnvIfNoCase User-Agent "^TeleportPro" bad_bot SetEnvIfNoCase User-Agent "^MIIxpc" bad_bot SetEnvIfNoCase User-Agent "^Telesoft" bad_bot SetEnvIfNoCase User-Agent "^Website Quester" bad_bot SetEnvIfNoCase User-Agent "^WebZip" bad_bot SetEnvIfNoCase User-Agent "^moget/2.1" bad_bot SetEnvIfNoCase User-Agent "^WebZip/4.0" bad_bot SetEnvIfNoCase User-Agent "^WebSauger" bad_bot SetEnvIfNoCase User-Agent "^WebCopier" bad_bot SetEnvIfNoCase User-Agent "^NetAnts" bad_bot SetEnvIfNoCase User-Agent "^Mister PiX" bad_bot SetEnvIfNoCase User-Agent "^WebAuto" bad_bot SetEnvIfNoCase User-Agent "^TheNomad" bad_bot SetEnvIfNoCase User-Agent "^WWW-Collector-E" bad_bot SetEnvIfNoCase User-Agent "^RMA" bad_bot SetEnvIfNoCase User-Agent "^libWeb/clsHTTP" bad_bot SetEnvIfNoCase User-Agent "^asterias" bad_bot SetEnvIfNoCase User-Agent "^httplib" bad_bot SetEnvIfNoCase User-Agent "^turingos" bad_bot SetEnvIfNoCase User-Agent "^spanner" bad_bot SetEnvIfNoCase User-Agent "^InfoNaviRobot" bad_bot SetEnvIfNoCase User-Agent "^Harvest/1.5" bad_bot SetEnvIfNoCase User-Agent "^Bullseye/1.0" bad_bot SetEnvIfNoCase User-Agent "^Mozilla/4.0 (compatible; BullsEye; Windows 95)" bad_bot SetEnvIfNoCase User-Agent "^Crescent Internet ToolPak HTTP OLE Control v.1.0" bad_bot SetEnvIfNoCase User-Agent "^CherryPickerSE/1.0" bad_bot SetEnvIfNoCase User-Agent "^CherryPicker /1.0" bad_bot SetEnvIfNoCase User-Agent "^WebBandit/3.50" bad_bot SetEnvIfNoCase User-Agent "^NICErsPRO" bad_bot SetEnvIfNoCase User-Agent "^Microsoft URL Control - 5.01.4511" bad_bot SetEnvIfNoCase User-Agent "^DittoSpyder" bad_bot SetEnvIfNoCase User-Agent "^Foobot" bad_bot SetEnvIfNoCase User-Agent "^WebmasterWorldForumBot" bad_bot SetEnvIfNoCase User-Agent "^SpankBot" bad_bot SetEnvIfNoCase User-Agent "^BotALot" bad_bot SetEnvIfNoCase User-Agent "^lwp-trivial/1.34" bad_bot SetEnvIfNoCase User-Agent "^lwp-trivial" bad_bot SetEnvIfNoCase User-Agent "^Wget/1.6" bad_bot SetEnvIfNoCase User-Agent "^BunnySlippers" bad_bot SetEnvIfNoCase User-Agent "^Microsoft URL Control - 6.00.8169" bad_bot SetEnvIfNoCase User-Agent "^URLy Warning" bad_bot SetEnvIfNoCase User-Agent "^Wget/1.5.3" bad_bot SetEnvIfNoCase User-Agent "^LinkWalker" bad_bot SetEnvIfNoCase User-Agent "^cosmos" bad_bot SetEnvIfNoCase User-Agent "^moget" bad_bot SetEnvIfNoCase User-Agent "^hloader" bad_bot SetEnvIfNoCase User-Agent "^humanlinks" bad_bot SetEnvIfNoCase User-Agent "^LinkextractorPro" bad_bot SetEnvIfNoCase User-Agent "^Offline Explorer" bad_bot SetEnvIfNoCase User-Agent "^Mata Hari" bad_bot SetEnvIfNoCase User-Agent "^LexiBot" bad_bot SetEnvIfNoCase User-Agent "^Web Image Collector" bad_bot SetEnvIfNoCase User-Agent "^The Intraformant" bad_bot SetEnvIfNoCase User-Agent "^True_Robot/1.0" bad_bot SetEnvIfNoCase User-Agent "^True_Robot" bad_bot SetEnvIfNoCase User-Agent "^BlowFish/1.0" bad_bot SetEnvIfNoCase User-Agent "^JennyBot" bad_bot SetEnvIfNoCase User-Agent "^MIIxpc/4.2" bad_bot SetEnvIfNoCase User-Agent "^BuiltBotTough" bad_bot SetEnvIfNoCase User-Agent "^ProPowerBot/2.14" bad_bot SetEnvIfNoCase User-Agent "^BackDoorBot/1.0" bad_bot SetEnvIfNoCase User-Agent "^toCrawl/UrlDispatcher" bad_bot SetEnvIfNoCase User-Agent "^WebEnhancer" bad_bot SetEnvIfNoCase User-Agent "^TightTwatBot" bad_bot SetEnvIfNoCase User-Agent "^suzuran" bad_bot SetEnvIfNoCase User-Agent "^VCI WebViewer VCI WebViewer Win32" bad_bot SetEnvIfNoCase User-Agent "^VCI" bad_bot SetEnvIfNoCase User-Agent "^Szukacz/1.4" bad_bot SetEnvIfNoCase User-Agent "^QueryN Metasearch" bad_bot SetEnvIfNoCase User-Agent "^Openfind data gathere" bad_bot SetEnvIfNoCase User-Agent "^Openfind" bad_bot SetEnvIfNoCase User-Agent "^Xenu's Link Sleuth 1.1c" bad_bot SetEnvIfNoCase User-Agent "^Xenu's" bad_bot SetEnvIfNoCase User-Agent "^Zeus" bad_bot SetEnvIfNoCase User-Agent "^RepoMonkey Bait & Tackle/v1.01" bad_bot SetEnvIfNoCase User-Agent "^RepoMonkey" bad_bot SetEnvIfNoCase User-Agent "^Zeus 32297 Webster Pro V2.9 Win32" bad_bot SetEnvIfNoCase User-Agent "^Webster Pro" bad_bot SetEnvIfNoCase User-Agent "^EroCrawler" bad_bot SetEnvIfNoCase User-Agent "^LinkScan/8.1a Unix" bad_bot SetEnvIfNoCase User-Agent "^Keyword Density/0.9" bad_bot SetEnvIfNoCase User-Agent "^Kenjin Spider" bad_bot SetEnvIfNoCase User-Agent "^Cegbfeieh" bad_bot Order Allow,Deny Allow from all Deny from env=bad_bot 

Переадресация по языку

RewriteEngine on RewriteCond % (ru) [NC] RewriteRule .* КУДА [L]

Защита картинок от скачивания по ссылкам на других сайтах

Включая переходы без REFERER, т.е. когда адрес указывают в строке браузера.

RewriteEngine on RewriteCond % !^$ RewriteCond % !^http(s)?://(www\.)?yourdomain.com [NC] RewriteRule \.(jpg|jpeg|png|gif)$ КУДА_ПОСЛАТЬ [NC,R,L]

Только по сссылкам на чужих сайтах:

RewriteEngine on RewriteCond % !^http(s)?://(www\.)?yourdomain.com [NC] RewriteRule \.(jpg|jpeg|png|gif)$ КУДА_ПОСЛАТЬ [NC,R,L]

Блокировать пользователей с определенным рефером

Если вы не хотите, чтобы пользователи переходя с определенных сайтов попадали на ваш, вы можете это запретить.

RewriteEngine on RewriteCond % bannedurl1.com [NC,OR] RewriteCond % bannedurl2.com [NC,OR] RewriteRule .* - [F]

bannedurl1.com и bannedurl2.com — примеры запрещенных сайтов.

Ограничение размера файла загрузки в PHP, максимального размера запроса и максимального времени выполнения скрипта

Объем загружаемого файла:

php_value upload_max_filesize 15M

Максимальный размер запроса для загрузки в PHP:

php_value post_max_size 10M

Время выполнения скрипта:

php_value max_execution_time 240

Время для скрипта на разбор введенных данных:

php_value max_input_time 180

Указываем для IE режим вывода

Установка заголовка X-UA-Compatible:

Header set X-UA-Compatible "IE=Edge"

Установка Vary: Accept-Encoding

Для поисковой оптимизации и уменьшения времени загрузки страницы, Google рекомендует установить заголовок Vary: Accept-Encoding

Заголовок ответа HTTP/1.1 Vary позволяет серверу указать, что закэшированный ресурс может использоваться без проверки только, если указанные в Vary заголовки совпадают с заголовками запроса. Значения: Accept-Encoding, Host, User-Agent, Accept-Language.

  Header append Vary: Accept-Encoding 

Общий файл картинки для всех доменов (глобальные алиасы)

Alias /javascripts /usr/share/javascript/ Options FollowSymLinks MultiViews 

Положите общий файл, например, icon.png в директорию /usr/share/javascript/
В файл /etc/javascript-common/javascript-common.conf и добавьте строку:

Alias /apple-touch-icon-precomposed.png /usr/share/javascript/icon.png

При загрузке .doc, .docx файлы открываются в браузере с непонятной кодировкой

Если у вас открываются .doc, .docx файлы в браузере с непонятной кодировкой и вы хотите чтобы при левом клике файл сохранялся, а не открывался, то вам необходимо прописать в .htaccess:

AddType application/force-download doc AddType application/force-download docx AddType application/force-download xls AddType application/force-download xlsx

Перенаправление на безопасное соединение https

Если вы используете https и хотите, чтобы все пользователи перенаправлялись на него, то вам поможет следующий код:

RewriteEngine On RewriteCond % !on RewriteRule (.*) https://%%

Доступ если установлена cookie с помощью htaccess

Если Ваш логин на сайте admin и он устанавливается в куку с именем login Вы можеле легко закрыть доступ посторонним в любую директорию. Для этого создайте в этой директории(папке) файл .htaccess со следующим содержимым:

RewriteEngine On RewriteCond % !login=admin [NC] RewriteRule .* http://%/ [L,R=301]

По этому же принципу можно закрывать сайт на профилактические работы для всех кроме админа.

Доступ к заголовкам «If-Modified-Since» и «If-None-Match» для реализации http 304 ответа

Если PHP не установлен как модуль Apache, то для доступа к заголовкам «If-Modified-Since» и «If-None-Match» необходимо в корневом каталоге веб-сайта поместить файл .htaccess следующего содержания:

RewriteEngine On RewriteRule .* — [E=HTTP_IF_MODIFIED_SINCE:%] RewriteRule .* — [E=HTTP_IF_NONE_MATCH:%]

После этого, необходимые заголовки будут доступны как $_SERVER['HTTP_IF_MODIFIED_SINCE'] и $_SERVER['HTTP_IF_NONE_MATCH'].

Следует заметить, что заголовки «If-Modified-Since» и «If-None-Match» не отправляются браузером, если в предыдущих запросах к данной странице он не получал в ответе веб-сервера заголовок «Last-Modified». Кроме того, при использовании в веб-приложении сессий с установками по умолчанию, указанные заголовки также не будут присылаться браузером. Для того чтобы избежать такого поведения браузера, необходимо перед запуском сессии выполнять функцию session_cache_limiter, передавая в качестве аргумента параметр 'private_no_expire':

session_cache_limiter('private_no_expire'); session_start();

Пред и пост обработка с помощью .htaccess

# Запуск перед запрашиваемым файлом php_value auto_prepend_file "/dir/header.php" # Запуск после запрашиваемого файла php_value auto_append_file "/dir/footer.php"

Кроме этого дополнительную информацию по теме можно почерпнуть:

  • www.egoroff.spb.ru - примеры переадресаций
  • htaccess.net.ru - дополнительная информация по htaccess

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

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?

asked Jan 14, 2011 at 1:33
Michael Novello Michael Novello
583 1 1 gold badge 4 4 silver badges 5 5 bronze badges

Though it's not a direct answer to your question, using sed or any good IDE will allow you find-and-replace across an entire directory/project. Also, you can batch rename files pretty easily on Linux.

Jan 14, 2011 at 1:43

Yes but if you rename the files using sed, you might get many broken links. Of course, you can also try to change all the links in your website, but there's also links from all over the Internet that might point to your website.

Jan 14, 2011 at 2:26

19 Answers 19

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 

4,984 7 7 gold badges 56 56 silver badges 117 117 bronze badges
answered Jan 14, 2011 at 1:36
Marc-François Marc-François
3,900 3 3 gold badges 28 28 silver badges 47 47 bronze badges

I had to add 5 to the end of the type for it to work, i.e. AddType application/x-httpd-php5 .html .htm (CentOS running PHP 5.3)

Apr 9, 2014 at 9:17
This doesn't work for me. It makes Firefox want to download the html file and display it.
Apr 17, 2014 at 0:30
@LeeBlake I am having the same issue. Any luck with this?
Jun 27, 2015 at 20:23
it causing file to be downloading
Jun 25, 2018 at 11:14
@AndreiKrasutski Done that. Still downloading.
Feb 2, 2020 at 19:46

In My Godaddy Server the following code worked

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

39.7k 20 20 gold badges 94 94 silver badges 123 123 bronze badges
answered Mar 9, 2013 at 9:50
139 1 1 silver badge 3 3 bronze badges
I think mentioning "Godaddy" robs you off your first spot.
Aug 11, 2015 at 7:49

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:

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

1 1 1 silver badge
answered Mar 20, 2018 at 3:12
569 8 8 silver badges 19 19 bronze badges
Perfect! Thank You!
Jan 22, 2020 at 19:52

Is there a way to determine this handler in another way? Because $_SERVER['REDIRECT_HANDLER'] is returning null in my case 🙁

Jun 11, 2020 at 7:01

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

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:

[T=application/x-httpd-php5] 
[T=application/x-httpd-php] 

answered Nov 30, 2015 at 19:01
Amit Verma Amit Verma
40.9k 21 21 gold badges 93 93 silver badges 115 115 bronze badges

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:

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

"> AllowOverride All 
sudo a2enmod rewrite 

After any of those steps, you should restart apache:

sudo service apache2 restart 

157k 88 88 gold badges 680 680 silver badges 747 747 bronze badges
answered Mar 26, 2016 at 20:23
3,481 2 2 gold badges 44 44 silver badges 71 71 bronze badges

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 

answered Aug 28, 2012 at 20:11
1,622 2 2 gold badges 22 22 silver badges 44 44 bronze badges

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 

answered Jun 20, 2018 at 20:35
Mike Slaught Mike Slaught
89 1 1 silver badge 6 6 bronze badges

The correct answer varies depending on webserver configuration. This one is the correct answer in my case too (and I'm not with GoDaddy) . so if you're having problems, it's probably best to check with your web host.

Dec 23, 2018 at 15:02

It depends wether your hosting provider uses LSAPI (LiteSpeed) version of PHP handler then you have to use application/x-httpd-lsphp instead of application/x-httpd-php

Jun 4, 2019 at 10:13
Works for my hostgator shared server. Thank you
Jun 16 at 20:01

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

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

54k 28 28 gold badges 137 137 silver badges 148 148 bronze badges
answered Apr 27, 2013 at 16:25
41 3 3 bronze badges

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 

157k 88 88 gold badges 680 680 silver badges 747 747 bronze badges
answered Dec 19, 2014 at 23:01
user4379513 user4379513
This worked with hostgator shared hosting as well. Thanks.
Jun 27, 2015 at 20:24

I am using godaddy and that is the only one that's worked for me. others either don't work or download the html page without displaying it!

Aug 3, 2016 at 17:21

here put this in your .htaccess

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

more info on this page

answered Jan 14, 2011 at 1:35
3,761 4 4 gold badges 30 30 silver badges 37 37 bronze badges

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

answered Jul 3, 2015 at 7:26
Philipp Michael Philipp Michael
954 1 1 gold badge 11 11 silver badges 22 22 bronze badges

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

answered Jan 27, 2017 at 22:30
11 2 2 bronze badges

Please use the edit link to explain how this code works and don't just give the code, as an explanation is more likely to help future readers. See also How to Answer. source

Jan 27, 2017 at 22:50

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 

answered Mar 22, 2018 at 13:45
140 1 1 silver badge 9 9 bronze badges

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 

answered Sep 12, 2019 at 0:47
5,972 4 4 gold badges 29 29 silver badges 36 36 bronze badges

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:

 Options Indexes FollowSymLinks AllowOverride All Require all granted 

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 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *