Назад | Перейти на главную страницу

mod_rewrite для постоянных ссылок WordPress

Мой текущий файл .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-адрес поверх этого. Это достаточно простой вызов функции, но все равно вот документ:

http://codex.wordpress.org/Function_Reference/get_bloginfo