htaccess перезаписать, если перенаправленный файл существует

Проблема: некоторые html-страницы эквивалентов php (apple.html, apple.php; orange.html, orange.php), но нет все делают (grapes.html).

Цель: Если версия php существует, перепишите, в противном случае оставьте ее версию html.

У меня:

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)\.html$ /$1.php [R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.php$ /$1.html [R]

Интересные вопросы:

Если я не поставлю / перед $ 1.php, то я получаю: site.com/document/root/path (то есть: site.com/home/user/www/file.php)

При вызове второго RewriteRule я получаю http://site.com/http:/site.com/page.html и он говорит мне, что было слишком много перенаправлений. Обратите внимание, что во втором http есть только один /.

Я добился некоторого прогресса, я добавил RewriteBase / и удалил / перед $ 1, но я все еще получаю ошибку слишком большого количества перенаправлений (веб-страница site.com/page.html привела к слишком большому количеству перенаправлений. Очистка файлов cookie для этого сайта или разрешение сторонних файлов cookie может решить проблему. Если нет, то это возможно, проблема с конфигурацией сервера, а не с вашим компьютером).

Похоже, если я просто перепишу html -> php -> html, я получу ту же ошибку. Похоже, что логика работает, но такая логика недопустима. Я не могу придумать другого способа узнать, существует ли "версия php" файла? Единственный способ, который я могу придумать, - это сделать что-то подобное:

RewriteCond ^(.*)\.html$ $1.php -f
RewriteRule ^(.*)\.html$ $1.php [R]

К сожалению, это не совсем сработает (я предполагаю, потому что в строке условия есть три сегмента). Я пытаюсь получить имя файла без расширения, а затем скажу, если filename.php является файлом, перепишите page.html на страницу. php

8
задан user677285 25 March 2011 в 20:18
поделиться