- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Фактически страницы на сервере - .php с динамической начинкой. Извне они отзываются на .htm. для этого используется Rewrite:
Но при таком раскладе получаются дубли страниц:
site.ru/page.php
site.ru/page.htm
Вопрос, как сделать, чтобы остался только один? То есть при вызове page.php напрямую в строке всегда виделся фиктивный page.htm?
Очевидно, добавить редирект с .php на .htm
RewriteRule ^(.+)\.php$ $1\.html [R=301,L]
;12870113']Очевидно, добавить редирект с .php на .htm
Чересчур очевидно. Пройдено. Не работает.
Апач выдает Moved Permanently и линк на сформированный в цикле URL в никуда. Получается-то мы сообщаем, что .php перемещен в .htm, а .htm и есть .php, который перемещен в .htm...
Это происходит потому что вы добавили мой редирект после своего реврайта, в котором у вас нет флага "L".
Т.е. нужно или редирект добавить в начало или добавить в ваше правило флаг "L".
Одного флага L в данном случае будет не достаточно, так как если был произведен реврайт цикл запуститься снова в любом случае, даже если он был остановлен флагом L - last.
Поэтому, в этому случае либо устанавливают дополнительную переменную окружения к реврайту, либо проверяют серверную переменную %{THE_REQUEST}, либо, самый простой способ на мой взгляд, проверять переменную окружения ENV REDIRECT_STATUS которая пуста если не был произведен реврайт.
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.+)\.php$ /$1.html [R=301,L]
Добавлять нужно перед реврайтом, а чтобы не запутаться можно сразу после RewriteEngine On
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.+)\.php$ /$1.html [R=301,L]
RewriteRule ^(.+)\.htm$ $1\.php [NC,L]
самый простой способ на мой взгляд, проверять переменную окружения
Спасибо! Этот вариант работает. 🍻