Настройка WordPress с помощью пользовательских постоянных ссылок и файла .htaccess?

wordpress.stackexchange https://wordpress.stackexchange.com/questions/994

  •  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, но если это направление вас интересует, вот некоторые ссылки для использования:

Другие советы

Постоянные ссылки без 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 или просить вас изменить файл. Это решение может быть не для всех, но стоит рассмотреть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top