mikelee
  • 0
Учитель

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

  • 0

У меня есть клиент, который предпочитает отключать файлы.htaccess, потому что им нравится самим устанавливать конфигурации Apache. Тем не менее, они по-прежнему хотят SEO-дружественные URL-адреса.

Есть ли способ иметь пользовательские постоянные ссылки без файла.htaccess? Мои исследования до сих пор, кажется, показывают, что это невозможно, но, возможно, один из блестящих разработчиков знает, как невозможное может быть возможным. Заранее спасибо!

Share
  1. Можете ли вы (или попросите их) изменить файл httpd.conf?

    • 0
    • Если совершенно невозможно иметь пользовательские постоянные ссылки без файла.htaccess, тогда я дам им их альтернативы: 1) не оптимизированные для SEO URL-адреса или 2) оптимизированные для SEO URL-адреса и файл htaccess. Это единственные жизнеспособные варианты, которые я сейчас вижу, но если я ошибаюсь, я бы хотел, чтобы меня поправили. 🙂

      • 0
    • Спасибо за очень полезный и подробный ответ, как всегда! Клиент склоняется к изменению httpd.conf, и, скорее всего, именно этим мы и займемся. Повышение производительности также является хорошим бонусным советом!

      • 0
    • @Mike Lee : Да, всегда приятно, когда ты можешь сказать: «Вы действительно должны делать это таким образом, и, кстати, вы получите лучшую производительность, если сделаете это !» Я нахожу, что это часто влияет на них. 🙂

      • 0
    • Я хочу, чтобы моя компания присоединилась к NGINX. Это действительно хорошая часть программного обеспечения. Я настроил его для небольшого сайта, который создавал, и SNAP оказался быстрым!

      • 0
    • @Chris_O : Я не хочу быть придурком и голосовать против, поэтому я не буду, но я должен сказать, что меня действительно съеживает, когда я вижу, что люди используют это решение. Я знаю, что вы просто пытались помочь, учитывая заявленные ограничения, но, на мой взгляд, такой подход враждебен пользователю, замедляет обмен в социальных сетях и, что еще хуже, создает впечатление, что сайт создали любители. Но затем я завел блог blog.welldesignedurls.org несколько лет назад, так что у меня есть идеологическая склонность против таких вещей. 🙂

      • 0
    • @Chris_) : Просто чтобы прояснить, мои комментарии были направлены на решение, а не на вас; ты замечательный! Просто хотел, чтобы вы это знали. 🙂

      • 0
    • Без обид. Просто предлагаю единственное известное мне решение, которое не использует.htaccess или httpd.conf. Согласен, что это не идеально, но я бы предпочел использовать его вместо example.org/?p=123, если бы это был мой ЕДИНСТВЕННЫЙ выбор.

      • 0
    • Я согласен, что это не идеальный путь, но я ценю предложение в качестве альтернативы. И намного лучше, чем example.org/?p=123!

      • 0
    • Спасибо за ответ. Клиент склоняется к изменению httpd.conf прямо сейчас.

      • 0
  2. Привет @Майк Ли :

    Чтобы ответить на ваш вопрос, полезно понять, как все работает.

    Apache обслуживает URL-адреса, соответствующие файлам и каталогам

    Apache предназначен для обслуживания файлов, явно совпадающих по URL-адресу, или для обслуживания файлов, index.php найденных в каталоге, когда каталог явно соответствует.

    Но Apache может обслуживать URL-адреса, соответствующие регулярному выражению, с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 $_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-адресов (и даже сегодня это все еще настоящая PITA!) Это был уродливый хак, было больно поддерживать, и я ненавидел его но URL-адреса, безусловно, были хороши как для пользователей, так и для SEO!

    Лучшее решение? Добавьте правила перезаписи вhttpd.conf

    Вернемся к тому, что, вероятно, является вашим лучшим решением, и @Simon Brown действительно рекомендовал его; добавьте свои правила перезаписи в httpd.conf один из включенных файлов, например httpd-vhosts.conf (именно так настроен Apache на локальном хосте на моем 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 с сервером кэширования, таким как Nginx, который, я считаю, становится лучшей практикой для сайтов WordPress с высоким трафиком, которым действительно нужна производительность. Это может потребовать настройки зеленого поля, потому что я не думаю, что большинство людей используют Nginx для перезаписи URL-адресов для Apache, но если это направление вас интересует, вот несколько ссылок для продолжения:

    • 0
  3. Постоянные ссылки без mod_rewrite

    Без файла.htaccess или изменения файла httpd.conf лучшее, что вы можете сделать, это постоянные ссылки pathinfo. Постоянные ссылки Pathinfo такие же, как красивые постоянные ссылки, за исключением того, что они начинаются с index.php.

    Чтобы использовать постоянные ссылки pathinfo, поместите index.php/ в начало вашей пользовательской структуры постоянных ссылок:

    /index.php/%postname%/
    

    Дополнительную информацию см. в статье Кодекса.

    • 0
  4. В старые добрые времена WordPress нужно было писать новый файл конфигурации каждый раз, когда вы изменяли структуру постоянных ссылок. В современных настройках RewriteRules не меняются:

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

    • 0

Оставить ответ

You must login to add an answer.