Перенаправление Htaccess для одной страницы не работает - PullRequest
0 голосов
/ 07 февраля 2020

Мой файл .htaccess имеет код перенаправления и перезаписи. Все работает нормально, за исключением одной страницы. Мне нужно перенаправить https://example.com/shopping/ceylon-cinnamon-c-62.html и http://example.com/shopping/index.php?cPath=62 на https://example.com/ceylon-cinnamon-c-2_19.html Я пробовал четыре строки в разделе НИ ОДНОЙ ИЗ ЭТИХ РАБОТЫ ниже (по одной на время) но перенаправление никогда не работает. URL-адрес результата https://example.com/c-62.html. Кто-нибудь может указать на проблему или как ее проверить?

 Options +FollowSymLinks -Indexes
 RewriteEngine On 
 RewriteBase /

 # NONE OF THESE WORK
 Redirect 301 /shopping/ceylon-cinnamon-c-62.html https://example.com/index.php?cPath=2_19
 Redirect 301 /shopping/index.php?cPath=62 https://example.com/index.php?cPath=2_19
 RewriteRule ^(.*?)shopping/ceylon-cinnamon-c-62.html$ https://example.com/index.php?cPath=2_19 [R=301,L,NC] 
 RewriteRule ^(.*?)shopping/index.php?cPath=62$ https://example.com/index.php?cPath=2_19 [R=301,L,NC] 

 # THESE ALL WORK 
 RewriteRule ^shopping/(.*)$ /$1 [R=301,NC,L]

 #redirect index.php to root
 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
 RewriteRule ^index\.php$ https://example.com/ [R=301,L]

 RewriteCond %{SERVER_PORT} 80
 RewriteRule ^(.*)$ https://example.com/$1 [R,L]

 RewriteRule ^(.*)-c-(.*).html$ index.php?cPath=$2&%{QUERY_STRING}

1 Ответ

0 голосов
/ 07 февраля 2020

Ваш вопрос немного расплывчатый ... Правила, приведенные вами в качестве примера («НИКАКОГО ИЗ ЭТИХ РАБОТ») не имеют ничего общего с тем, что вы задаете в своем вопросе. И заявленный результат попыток переписывания определенно не соответствует вашим попыткам. Так что либо ваше описание неверно (возможно, записано из памяти?), Либо у вас есть какой-то другой фактор, о котором вы нам не говорите (логика некоторых приложений c, возможно, реализующая свое перенаправление?) ...

В любом случае, вот простые правила для реализации точного перенаправления, о котором вы спрашиваете, независимо от каких-либо других вещей:

RewriteEngine on

RewriteCond %{QUERY_STRING} (?:^|&)cPath=62(?:&|$)
RewriteRule ^/?shopping/index\.php$ /ceylon-cinnamon-c-2_19.html [R=301]

RewriteRule ^/?shopping/ceylon-cinnamon-c-62\.html$ /ceylon-cinnamon-c-2_19.html [R=301]

Хорошая идея - начать с временного перенаправления 302 и только изменить его. на постоянное перенаправление 301 позже, как только вы убедитесь, что все настроено правильно. Это предотвращает проблемы с кэшированием при испытаниях ...

Тем не менее, при тестировании убедитесь, что вы не смотрите на кэшированные результаты. При тестировании всегда используйте окно браузера anonymouse fre sh, выполняйте глубокие перезагрузки , а не просто перезагружайте и наблюдайте за сетевой консолью браузера на предмет фактического ответа, который вы получаете ...

Эта реализация будет Аналогичным образом работайте в конфигурации хоста http-серверов или внутри файла конфигурации Dynami c (файл ".htaccess"). Очевидно, что модуль перезаписи должен быть загружен внутри http-сервера и включен на хосте http. Если вы используете файл конфигурации Dynami c, вам нужно позаботиться о том, чтобы его интерпретация вообще была включена в конфигурации хоста и находилась в папке DOCUMENT_ROOT хоста.

И общее замечание: вам всегда следует размещать такие правила в конфигурации хоста http-серверов вместо использования файлов конфигурации Dynami c (".htaccess"). Эти динамические c файлы конфигурации добавляют сложность, часто являются причиной неожиданного поведения, их трудно отладить, и они действительно замедляют работу http-сервера. Они предоставляются только в качестве последнего варианта для ситуаций, когда у вас нет доступа к реальной конфигурации хоста http-серверов (читай: действительно дешевые поставщики услуг) или для приложений, настаивающих на написании своих собственных правил (что является очевидным кошмаром безопасности).

...