Пользовательский WordPress HTTP перенаправляет на HTTPS-сайт - PullRequest
1 голос
/ 18 февраля 2020

Я добавил дополнительные правила в мой файл .htaccess.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule !^/articles/(.*)$ https://%{HTTP_HOST}/index.php?name=$1 [L,R=301]
RewriteRule ^(articles/)(.*)$ https://%{HTTP_HOST}/index.php?name=$2 [L,R=301]
</IfModule> 

У меня есть два условия, которые, кажется, работают:

Но проблема в том, что после добавления этих правил мой сайт начинает создавать перенаправляет везде. Например, я не могу получить доступ к своему домену https://example.com, который меняется на https://example.com/index.php?name=. Все ссылки на моем сайте ломаются.

Что я делаю не так?

1 Ответ

0 голосов
/ 18 февраля 2020
RewriteCond %{HTTPS} off
RewriteRule !^/articles/(.*)$ https://%{HTTP_HOST}/index.php?name=$1 [L,R=301]
RewriteRule ^(articles/)(.*)$ https://%{HTTP_HOST}/index.php?name=$2 [L,R=301]

Первое правило соответствует all , поскольку URL-путь, соответствующий шаблону RewriteRule в контексте .htaccess никогда не начинается с sla sh (вы, кажется, узнали это во втором правиле). Вы также не можете иметь группы захвата в отрицательных шаблонах - по определению, отрицательный шаблон на самом деле ничего не соответствует.

И второе правило выполняется безоговорочно, как для HTTP, так и для HTTPS, поскольку директивы RewriteCond применяются только к первому следующему RewriteRule. (Но эти два правила в любом случае можно объединить в одно.)

Чтобы внешне «перенаправить» (в соответствии с вашим примером) URL-адрес вида http://example.com/this-is-old-url/ (или http://example.com/articles/this-is-old-url/) на https://example.com/index.php?name=this-is-old-url, тогда вы в верхней части файла .htaccess можно выполнить следующие действия:

RewriteCond %{HTTPS} off
RewriteRule ^(?:articles/)?([\w-]+/)$ https://%{HTTP_HOST}/index.php?name=$1 [R=301,L]

ОБНОВЛЕНИЕ: регулярное выражение теперь включает - (дефисы) и конечный sla sh. Обратите внимание, что конечный sla sh включен как часть группы захвата. Таким образом, он перенаправляет на /index.php?name=this-is-old-url/ (с конечным sla sh).

Подшаблон (?:articles/)? является необязательным и не захватывается. Итак, это одно правило соответствует URL-адресам вашего примера.

Оболочка <IfModule> не требуется. И ни одна из них не является директивой RewriteEngine, поскольку она, вероятно, уже есть в следующем блоке кода WordPress.

Вам необязательно указывать index.php, вы можете вместо этого перенаправить на /?name=... при условии, что DirectoryIndex установлен правильно.

Вам нужно очистить кеш браузера перед тестированием. (Предпочтительно сначала выполнить 302 - временные - перенаправления.)

Я не могу получить доступ к своему домену https://example.com, который меняется на https://example.com/index.php?name=.

Это невозможно Это произошло с вашими существующими правилами, только если вы запросили http://example.com (обратите внимание, HTTP, а не HTTPS).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...