Apache перезаписывает домашнюю страницу только через прокси

Я пробовал различные регулярные выражения ( ^ / $ , ^ index.php $ , ^ $ ) для перезаписи / прокси только домашней страницы веб-сайта WordPress через .htaccess . Для записи у меня есть соответствующие модули, загруженные для этого, и я могу сделать это для других путей с определенным обычным экспрессом, но только не для домашней страницы. В других ответах указано, что ^ $ и ^ / $ будут работать, но у меня это не работает. Как можно настроить таргетинг только на домашнюю страницу?

RewriteEngine On
RewriteBase /
RewriteRule ^$ http://some-other-domain.com [P]

Конечная цель - предоставить страницу с другого веб-сайта только для домашней страницы. Может быть, есть лучший подход?

2
задан 5 January 2021 в 20:22
1 ответ

Попробуйте вместо этого сделать что-то вроде следующего, в верхней части файла .htaccess, перед фронт-контроллером WordPress:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(index\.php)?$ http://some-other-domain.com/ [P]

Директивы RewriteBase и RewriteEngine здесь не нужны. RewriteEngine предположительно уже появляется позже в файле как часть блока кода # BEGIN WordPress (порядок не важен).

Обратите внимание на суффикс слэш в строке substitution. Это обязательная часть URL (вы не можете иметь пустой URL-путь). Если вы опустите ее здесь, то что-то другое должно "исправить" ее позже. В случае внешнего перенаправления браузер будет "исправлять" это, но здесь нет никакого "браузера".

Это соответствует как пустому URL-пути, так и index.php (в случае, если mod_dir выдает подзапрос для индекса каталога до того, как mod_rewrite отправит запрос через mod_proxy). Условие условие, проверяющее REDIRECT_STATUS env var, необходимо в данном случае, чтобы избежать проксирования всего, поскольку фронт-контроллер WordPress переписывает все в index.php. Условие гарантирует, что будут сопоставлены только прямые запросы, а не переписанные.

Aside: Правило RewriteRule pattern типа ^/$ никогда не будет соответствовать в контексте .htaccess. Это будет работать, только если директива используется в контексте server (или virtualhost).

1
ответ дан 7 May 2021 в 18:35

Теги

Похожие вопросы