htaccess перенаправить все, кроме одной страницы из HTML в PHP - PullRequest
4 голосов
/ 27 августа 2011

Мой сайт настроен с помощью 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?

Ответы [ 2 ]

7 голосов
/ 27 августа 2011

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

RewriteCond %{REQUEST_FILENAME} !-f

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

4 голосов
/ 27 августа 2011

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

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]

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

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

Если вы хотите, вы можете указать полный путь к файлу, чтобы быть более конкретным (полезно исключить только 1 конкретный файл, если существует более 1 файла с таким именем, но в разных папках - такой 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 в корневой папке сайта. При размещении в другом месте может потребоваться небольшая настройка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...