Мой текущий файл .htaccess выглядит так (автоматически сгенерирован WP)
$ cat .htaccess
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/healthydebate/index.php [L]
</IfModule>
Это стандартная настройка перезаписи WordPress. Проблема, с которой я столкнулся, заключается в настройке относительных ссылок сайта на моих страницах (например, ссылка в нижнем колонтитуле, указывающая на terms-and-conditions.php). Когда я нахожусь на домашней странице (например, blog / index.html), ссылка работает. Когда я нахожусь на дополнительной странице (например, блог / имя-категории / заголовок-статьи), ссылка не работает, потому что, будучи относительной ссылкой, она относится к имени блога / категории (например: блог / имя категории / условия-условия.php ).
Прежде чем кто-то предложит «просто использовать абсолютный URL-адрес», это не вариант (или, на самом деле, лучшая практика), потому что мы разрабатываем в другом домене и структуре сервера, чем окончательный сервер развертывания, поэтому все абсолютные URL-адреса должны быть переписаны каждый раз при развертывании.
Чтобы сделать проблему немного более сложной, мы также должны быть агностиками корневого каталога. То есть, даже если блог в настоящее время находится в / blog / clientsite /, он может в конечном итоге быть перемещен в какой-либо другой каталог, например / clientsite / или даже / STAGING / blogs / clientsite /, поэтому RewriteBase может быть немного сложным.
Я уверен, что решение чрезвычайно простое, но mod_rewrite определенно не моя сильная сторона.
Вам нужно добавить RewriteBase / blog
и удалите часть 'blog /' из RewriteRule
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /healthydebate/index.php [L]
</IfModule>
При перемещении каталога в будущем просто обновите RewriteBase.
Вы определенно хотите создавать абсолютные URL-адреса в шаблоне нижнего колонтитула, но не хотите их жестко кодировать. Вероятно, вам нужна функция WordPress get_bloginfo('wpurl')
чтобы получить базовый URL-адрес вашего сайта WordPress, как он указан в конфигурации вашего приложения, а затем сложите свой относительный URL-адрес поверх этого. Это достаточно простой вызов функции, но все равно вот документ: