Проблема: некоторые 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 могут устранить проблему. Если нет, возможно, это проблема с конфигурацией сервера и не проблема с вашим компьютером).
Похоже, если я просто переписал html -> php -> html, то получаю ту же ошибку. Таким образом, похоже, что логика работает, но такая логика не допускается. Я не могу думать о каком-либо другом способе, который я мог видеть, существует ли «версия php» файла? Единственный способ, о котором я могу думать, – сделать что-то похожее:
RewriteCond ^(.*)\.html$ $1.php -f RewriteRule ^(.*)\.html$ $1.php [R]
К сожалению, это не совсем работает (я предполагаю, потому что в строке состояния есть три сегмента). Я пытаюсь получить имя файла без расширения, а затем скажу, если filename.php является файлом, перепишите page.html на страницу.php
вы должны быть в состоянии достичь этого, используя два условия:
RewriteCond %{REQUEST_FILENAME} (.*)\.html$ RewriteCond %1\.php -f RewriteRule ^(.*)\.html$ $1.php [R,L]
Первое условие проверяет, закончилось ли имя файла с .html, а второе использует обратную ссылку% 1 из первого условия, чтобы проверить, существует ли версия .php.
Надеюсь, поможет. 🙂
Я сожалею, что ответил поздно, но вам нужно будет добавить директиву RewriteBase, чтобы она работала.
У меня была та же проблема (с вашим http: / stufff) и исправлена так:
RewriteBase /your/application_path RewriteCond %{REQUEST_FILENAME} (.*)\.html$ RewriteCond %1\.php -f RewriteRule ^(.*)\.html$ $1.php [L]
Надеюсь, это поможет!
Я также хотел бы переписать весь .html запрос на .php-файлы, но только если существует файл .php. Но мой вариант заключался в том, что это должно произойти только в том случае, если фактический .html-файл не существует.
Таким образом, только вызовы в .html-файлы, которые не существуют, переписываются в .php-файл, если они существуют по этим правилам: (Я также успешно протестировал это на локальном сервере XAMP, а также в онлайн-сервере Apache!)
# Rewrite rules to .html file to .php if the .php version # does actually exist. RewriteCond %{REQUEST_FILENAME} (.*)\.html [NC] RewriteCond %{REQUEST_FILENAME} !-f [NC] RewriteCond %1\.php -f [NC] RewriteRule ^(.*).html$ $1.php [NC]