htaccess перенаправляет все, кроме одной страницы, из html в php

Мой сайт настроен с htaccess, направляющим все страницы с html на php, как показано ниже:

RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^website.com RewriteRule (.*) http://www.website.com/$1 [R=301,L] RewriteRule ^(.+)\.html$ http://www.website.com/$1.php [R=301,L] 

Я пытаюсь настроить Yahoo Site Explorer и проверить свою учетную запись, мне нужно либо добавить метатег, либо добавить файл html в корневую папку вашего сайта. Yahoo отказывается признать мой метатег (я уверен, что добавил его правильно)! Поэтому мой единственный вариант – добавить html-файл.

Мой html-файл постоянно перенаправляется на php, и кажется, что yahoo не может его найти.

Есть ли что-то, что я могу добавить в файл htaccess, чтобы все файлы перенаправлялись на php отдельно от одного файла, который должен видеть yahoo?

Попробуйте добавить это условие:

 RewriteCond %{REQUEST_FILENAME} !-f 

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

Я вижу четыре основных подхода (вы выбираете, какой из них вам больше подходит – это зависит от логики правил перезаписи вашего сайта):

1. Добавьте глобальное правило исключения, которое предотвратит дальнейшие операции перезаписи в этом файле :

 RewriteCond %{HTTP_HOST} ^website.com RewriteRule (.*) http://www.website.com/$1 [R=301,L] # do not do any rewriting to this file RewriteRule somefile\.html$ - [L] RewriteRule ^(.+)\.html$ http://www.website.com/$1.php [R=301,L] 

Если вы хотите, чтобы вы указали полный путь к файлу, чтобы быть более конкретным (полезно исключить только один конкретный файл, если в нем есть более одного файла с таким именем, но в разных папках – такой URL-адрес должен начинаться с NO slash):

 # do not do any rewriting to this file RewriteRule ^full/path/to/somefile\.html$ - [L] 

2. Добавьте глобальное правило исключения, которое предотвратит любые дальнейшие операции перезаписи в ЛЮБОМ существующем файле или папке :

 RewriteCond %{HTTP_HOST} ^website.com RewriteRule (.*) http://www.website.com/$1 [R=301,L] # do not do anything for already existing files RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule .+ - [L] RewriteRule ^(.+)\.html$ http://www.website.com/$1.php [R=301,L] 

3. Добавьте условие исключения, которое запретит переписывать этот файл .html в .php :

 RewriteCond %{REQUEST_URI} !somefile\.html$ RewriteRule ^(.+)\.html$ http://www.website.com/$1.php [R=301,L] 

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

 RewriteCond %{REQUEST_URI} !^/full/url/path/to/somefile\.html$ 

4. Добавьте условие исключения, которое разрешит переписывать .html в .php, если такой файл .html не существует :

 RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+)\.html$ http://www.website.com/$1.php [R=301,L] 

ВСЕ ПРАВИЛА ВЫШЕ предназначены для размещения в .htaccess в корневой папке сайта. При размещении в другом месте может потребоваться небольшая настройка.