Настройка WordPress с помощью пользовательских постоянных ссылок и файла .htaccess?
-
16-10-2019 - |
Вопрос
У меня есть клиент, который решительно предпочитает отключить файлы .htaccess, потому что им нравится устанавливать сами конфигурации Apache. Тем не менее, они по-прежнему хотят, чтобы URL-адреса SEO.
Есть ли способ иметь пользовательские постоянные ссылки с файлом no .htaccess? Похоже, что мое исследование показывает, что это невозможно, но, возможно, один из блестящих разработчиков знает, как, казалось бы, невозможным может быть возможно. Заранее спасибо!
Решение
Привет @Mike Lee:
Чтобы ответить на ваш вопрос, полезно понять, как все работает.
Apache обслуживает URL -адреса, которые соответствуют файлам и каталогам
Apache предназначен для обслуживания файлов, явно соответствующих URL или для обслуживания index.php
найдено в каталоге, когда каталог явно соответствует.
Но Apache может обслуживать URL -адреса, соответствующие Regex с mod_rewrite
Если вы хотите, чтобы Apache соответствовал URL -адресам, где нет реальных каталогов (случай с WordPress и красивыми постоянными ссылками), то у вас должен быть какой -то способ сказать Apache, как обращаться с URL -адресами по -разному. И это именно то, что mod_rewrite
был разработан, чтобы разрешить; Это дает администраторам сервера возможность устанавливать правила для сопоставления URL -адресов с использованием регулярных выражений. Эти правила направляют результат другим URL -адресам, часто включая фактически .PHP
файлы, а иногда и с помощью URL -параметров. В конечном счете в правилах указывается, что фактические файлы загружаются.
А также mod_rewrite
настроен с любым .htaccess
или же httpd.conf
Для настройки mod_rewrite
Вы можете сделать это только внутри .htaccess
или внутри httpd.conf
файл или один из файлов, которые он включает, как потенциально httpd-vhosts.conf
. Анкет На самом деле я удивлен, если у вас есть навыки, чтобы контролировать Apache, что они еще не знают этого.
WordPress всегда использует одну и ту же простую .htaccess
Файл
Переходя к тому, что делает WordPress, когда вы устанавливаете постоянные ссылки WordPress пишет следующее в .htaccess
Файл, предполагая, что он доступен для записи (И в этом первом примере, предполагая, что ваш сайт сайта обслуживается из корня):
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Предостережение: когда ваш каталог на первой странице WordPress не является корнем
Если ваш сайт вместо этого обслуживается из /blog
тогда .htaccess
Файл написан, будет выглядеть так:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
WordPress маршруты все URL-адреса не совпадают/каталог, чтобы index.php
Итак, как вы можете видеть, единственное, что использует WordPress .htaccess
Для карты Любые URL в домен /index.php
(или же /blog/index.php
во втором примере) кроме Когда URL -адрес соответствует фактическому файлу (например .jpg
/.gif
/.png
изображение, а .css
Стайлс, таблица, а .js
Скрипт и т. Д.) Или, когда он соответствует фактическому каталогу (что, насколько я знаю, не имеет отношения к стандартной установке WordPress.)
В PHP
WordPress Sanages $_SERVER['REQUEST_URI']
Решить, что загружать
Внутри его PHP
код WordPress захватывает значение $_SERVER['REQUEST_URI']
который содержит полный запрос на URL бездельник Домен и схема (т.е. схема http
или же https
) и тогда он анализирует значение, чтобы определить, какой URL был запрошен, и, таким образом, какие страницы он должен загружать.
Обход .htaccess
? Получите Apache загрузить виртуальные URL -адреса (но удачи в этом!)
Так что, если вы хотите как -то обходить .htaccess
Ваша задача - заставить Apache ответить на произвольный URL -адрес, а затем загрузить WordPress и установить $_SERVER['REQUEST_URI']
быть путем URL плюс параметры; IOW подделывает это, но в хорошем смысле. Тем не менее, я знаю, не знает ли никаких способов, которые не слишком сложны для этого.
Внедрение /index.php/
(Может быть?!?)
Хотя * chris_o * правильно /index.php/
Для ваших URL -адресов я съеживаюсь всякий раз, когда вижу это. Он добавляет 10 символов к каждому URL -адресу, что делает их более длинными и менее значимыми для поисковых систем, но намного хуже делает их менее жильными и выглядит загадочно для пользователей. Извините, Крис, я знаю, что вы имели в виду хорошо, но фу!
Создайте реальные каталоги для каждого URL (может быть?)
Одним из способов получить красивые постоянные ссылки, не касаясь Apache, было бы написать сценарий, который генерирует фактический каталог для каждого URL, который вы хотите, а затем хранить index.php
Там это загрузило бы WordPress. Конечно, это было бы огромным усилием для крошечного преимущества, и потребует от сервера доступ к записи, который должен быть хуже, чем использование .htaccess
файл.
Я ненавижу признавать, но это то, что я сделал около 1998 года с .ASP
-А на основе веб -сайта, когда IIS
Не поддержал переписывание URL (и даже сегодня это все еще настоящая пита!) Это был уродливый взлом, было больно поддерживать, и я ненавидел его, но URL -адреса, конечно, были отличными для как для пользователей, так и для SEO!
Лучшее решение? Добавить правила перезаписывания в httpd.conf
Вернемся к тому, что, наверное, ваше лучшее решение, и @Simon Brown на самом деле рекомендовал это; Добавьте свои правила переписывания в httpd.conf
или один из файлов включения, как httpd-vhosts.conf
(Именно так Apache настроен на Localhost на моем Mac.) Добавьте следующую директиву, чтобы изменить каталог, чтобы соответствовать каталогу для вашего сайта:
<Directory "/home/example_user/public_html/">
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</Directory>
Бонус! С блокировкой также появляется производительность
Этот последний вариант должен устранить любой .htaccess
и положить контроль в их руки. Еще лучше, это немного более эффективно, так как httpd.conf
загружается только один раз, когда начинается Apache, но .htaccess
Файлы загружаются и анализируются по каждому запросу на URL!
PS еще одна вещь, чтобы рассмотреть Apache Front-End с сервером кэширования Nginx Что, я считаю, становится Лучшая практика для сайтов WordPress с высоким трафиком Это действительно должно быть исполнением. Это может потребоваться настройки зеленого поля, потому что я не думаю, что большинство людей используют Nginx, чтобы сделать переписывание URL для Apache, но если это направление вас интересует, вот некоторые ссылки для использования:
- WordPress Nginx Proxy Cache Integrator
- Использование Nginx в качестве кэширования прокси с WordPress+Apache
- Nginx как кеш прокси-сервера для WordPress
- WordPress, Nginx и WP Super Cache
- Nginx & wordpress mu w/ wp-super-cache
- Как ускорить WordPress с помощью Nginx и WP Super Cache
- Правила перезаписывания nginx для плагина W3 Total Cache
- Tweak Nginx для WordPress - Pretty URLS & WP Super Cache
Другие советы
Постоянные ссылки без mod_rewrite
Без файла .htaccess или изменение вашего файла httpd.conf лучше всего, что вы можете сделать, это Pathinfo Permanicks. Постоянные ссылки PathInfo такие же, как и красивые постоянные ссылки, за исключением того, что они начинаются с index.php.
Для использования PathInfo Permanicks PLUT index.php/ в начале вашей пользовательской структуры постоянной ссылки:
/index.php/%postname%/
Увидеть Кодекс статья Чтобы получить больше информации.
В течение плохих старых времен WordPress необходимо писать новый файл конфигурации каждый раз, когда вы меняли структуру постоянного ссылки. В современных настройках переписание неизменны:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Все запросы на несуществующие файлы (т. Е. Пользовательский путь постоянной ссылки, который не соответствует файлу в файловой системе) проходит через index.php, и $_SERVER['REQUEST_URI']
сообщает PHP, что на самом деле было запрошено. Ваш клиент может установить правила переписывания на httpd.conf или .htaccess, и вам не нужно будет изменять его при настройке структуры постоянной ссылки.
Некоторые плагины пытаются изменить сами .htaccess или просить вас изменить файл. Это решение может быть не для всех, но стоит рассмотреть.