Intereting Posts
Android-приложение отправляет строку для отображения на веб-странице php – usort или array_multisort? Преобразование временной метки времени datetime из mysql в php Codeigniter – Записывать несколько направляющих в один файл с новой структурой каталогов Терминал отображает неверную версию php (Snow Leopard) Не удалось подключиться к серверу PHP Adaptive Server (серьезность 9) самый быстрый способ выбрать N-й элемент хэша Как изменить URL-адрес перенаправления по умолчанию фильтра Laravel 5 Auth? Как исправить ошибки PHP, связанные с часовым поясом (function.strtotime и function.date) Функция PHP для удаления всех между определенным символом (-ами) в строке Php – Отладка Curl Вызов PHP-скриптов из Javascript без оставления текущей страницы Как получить доступ к свойству / значению массива, который был преобразован в объект? Использование $ _SESSION для переноса данных PHP: APC включен, но все еще не работает?

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 могут устранить проблему. Если нет, возможно, это проблема с конфигурацией сервера и не проблема с вашим компьютером).

Похоже, если я просто переписал 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] 
  1. Сначала проверьте, является ли запрошенный файл файлом .html (мы не хотим перезаписывать .jpg, .css, .pdf и т. Д.).
  2. Он проверяет, не существует ли этого .html-файла. (мы не хотим переписывать на .php, если он действительно существует).
  3. Затем он проверяет, существует ли версия .php (мы не хотим переписывать в не существующий файл .php).
  4. Затем он переписывает .html в .php