301 перенаправление на неправильный URL

#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 по умолчанию выше, в вашем файле есть несколько добавленных строк, которые я объясню.

  1. Это условный тест, если включен модуль mod_rewrite. Это нормально, но в вашем случае может быть необязательным.
      <IfModule mod_rewrite.c>
     
  2. Первые две строки ниже в порядке. Второй экземпляр RewriteEngine On должен быть удален и может быть источником вашей проблемы.
      RewriteEngine On
     RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
     RewriteEngine On
     
  3. Эти строки проверяют http протокол и перенаправляют на https .
      RewriteCond %{HTTPS} off
     RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
     
  4. Это конец условного блока. Это нормально и требуется, потому что у вас есть строка под номером 1 выше.
      </IfModule>
     

В принципе, ваш файл выглядит правильно для меня, за исключением второй RewriteEngine On директивы. Если вы удалите это и все еще будете иметь проблемы, я не думаю, что у вас есть .htaccess проблема, и вам следует искать другие проблемы в WordPress, такие как плагины перенаправления.

Комментарии:

1. А. Хороший улов в RewriteEngine. Я удалил его, и у меня все еще возникают проблемы. На данный момент я подозреваю проблему с WordPress