#wordpress #apache #.htaccess #redirect
#wordpress #apache #.htaccess #перенаправление
Вопрос:
Я унаследовал живой веб-сайт WordPress, где более 30 страниц были перенаправлены на 301 домашнюю страницу. Что есть… очевидно, что это не идеально.
Это пример того, что происходит:
https://www.example.com/shop — 301 —> https://example.com
В этом сценарии это то, что я хочу, чтобы происходило:
https://www.example.com/shop —> https://www.example.com/shop
Я бы считал себя новичком в Apache. Обычно я не использую htaccess, за исключением базовых перенаправлений SSL. Я всю ночь бился головой о стену, поэтому любые советы приветствуются.
Редактировать:
Кэширование, похоже, не является проблемой, поскольку перенаправление сохраняется в Chrome incognito. Вот мой текущий .htaccess:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Обновить:
Этот код в файле wp-config, по-видимому, вызывает проблемы. Когда я комментирую это, некоторые URL-адреса больше не 301, но загружаемое содержимое страницы по-прежнему является домашней страницей на каждой странице.
define('WP_SITEURL', 'https://' . $_SERVER['HTTP_HOST'] . '/');
define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST'] . '/');
Комментарии:
1. Мы не можем помочь с этой небольшой информацией. Мы не знаем, что такое «исходные ссылки» и «куда они должны идти»…
2. Спасибо за отзыв. Я обновил, чтобы включить конкретный пример того, что происходит. Дайте мне знать, если потребуется более подробная информация.
3. Хм, итак, вы не хотите, чтобы перенаправление происходило вообще, и вы говорите, что отключили ошибочные правила, чтобы вы ожидали, что перенаправление не произойдет. Верно? Для меня это выглядит так, как будто у вас простая проблема с кэшированием. Имейте в виду, что 301 — это постоянное перенаправление, поэтому браузеры не будут повторно извлекать исходный URL-адрес, а будут следовать ранее полученному перенаправлению, пока не истечет срок действия их кэша. Проверьте себя, используя новое анонимное окно браузера. Вы все еще получаете проводные результаты или все в порядке?
4. Вы правы в том, что я пытаюсь сделать. Я только что открылся в окне инкогнито, и перенаправление все еще происходит. Я обновлю свои вопросы своим кодом htaccess на случай, если я что-то неправильно закодировал.
5. Хорошо, это ценная информация. Следующим шагом в отладке является проверка того, что браузер фактически получает обратно. Откройте консоль в вашем браузере (обычно F12). Там вы найдете вкладку «сеть». Очистите его. Затем сделайте запрос, который вы хотите протестировать, и проверьте, что браузер действительно получает обратно. Что вы видите?
Ответ №1:
Ваш файл выглядит очень похоже на стандартный WordPress, за исключением пары элементов. Во-первых, у вас есть несколько RewriteBase
директив. Последний выигрывает и контролирует весь .htaccess
файл. Это должно быть исправлено. Во-вторых, у вас есть перенаправление с http
протокола на https
, что, вероятно, хорошо и преднамеренно.
Согласно документации WordPress, .htaccess
файл WordPress по умолчанию содержит:
# BEGIN WordPress
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
Работая с файлом WordPress по умолчанию выше, в вашем файле есть несколько добавленных строк, которые я объясню.
- Это условный тест, если включен модуль mod_rewrite. Это нормально, но в вашем случае может быть необязательным.
<IfModule mod_rewrite.c>
- Первые две строки ниже в порядке. Второй экземпляр
RewriteEngine On
должен быть удален и может быть источником вашей проблемы.RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteEngine On
- Эти строки проверяют
http
протокол и перенаправляют наhttps
.RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
- Это конец условного блока. Это нормально и требуется, потому что у вас есть строка под номером 1 выше.
</IfModule>
В принципе, ваш файл выглядит правильно для меня, за исключением второй RewriteEngine On
директивы. Если вы удалите это и все еще будете иметь проблемы, я не думаю, что у вас есть .htaccess
проблема, и вам следует искать другие проблемы в WordPress, такие как плагины перенаправления.
Комментарии:
1. А. Хороший улов в RewriteEngine. Я удалил его, и у меня все еще возникают проблемы. На данный момент я подозреваю проблему с WordPress