Проблема: некоторые 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