Управлять написанием URL-адресов в .htaccess или в PHP-коде?

Я изучаю, как переписывать URL-адреса в рамках LAMP. Я начал свое исследование с изучения кода WordPress. Я посмотрел на .htaccess 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

Я была удивлена ​​и обрадована! Я был удивлен, потому что я не видел ни одного из этих правил, подобных регулярным выражениям. Я был в восторге, потому что я могу отложить изучение того, как работают файлы .htaccess (торопясь к крайнему сроку), использовать приведенный выше скрипт и проанализировать переменную $_SERVER в PHP для данных URL.

Итак, мой вопрос: каковы преимущества/недостатки управления перезаписью URL-адресов в файле .htaccess? И каковы преимущества/недостатки управления перезаписью URL-адресов в PHP-коде?


person John    schedule 21.03.2009    source источник


Ответы (2)


Выполнение этого в PHP приведет к загрузке, разбору и выполнению большего количества PHP-скриптов/кода. Если вы пойдете по этому пути, не попадайте на нужную страницу с внешними редиректами. Помните, что PHP-скрипты, по сути, компилируются каждый раз, когда они выполняются (несмотря на кэширование кода операции).

mod_rewrite сделает это намного эффективнее. Это также заставит вас сохранять такие правила довольно простыми, поскольку mod_rewrite может использовать только регулярные выражения (и некоторые другие вещи), тогда как в PHP вы потенциально можете делать что угодно (например, выполнять поиск в базе данных, чтобы найти нужную страницу и т. д.). Нехорошо.

Регулярные выражения не сложны. Обычно это просто случай:

RewriteRule ^account/orders/(\w+)$ /account/orders.php?type=$1 [L]

90%+ моих правил перезаписи выглядят так. Довольно базовые вещи.

person cletus    schedule 21.03.2009
comment
спасибо Клетус. Я попробовал ваше правило перезаписи URL, и оно дало мне необычные результаты. Я разместил дополнительный вопрос здесь: stackoverflow.com/questions /669161/ - person John; 21.03.2009

ModRewrite: используйте, когда есть несколько различных вариантов. Если у вас много регулярных выражений, сервер почувствует нагрузку (в моем опыте было 30 сложных регулярных выражений). Кроме того, это привязывает вас к Apache (или другому поставщику, который поддерживает это). Преимущество: это очень просто реализовать. Недостаток: привязка к поставщику, меньшая гибкость.

PHP: используйте, когда вы можете сменить поставщика (у меня были случаи, когда разработка выполнялась в Apache, а в реальной системе работал lighttpd). Также используйте, если вы хотите предоставить пользовательскую перезапись URL-адресов (мы использовали это с экраном конфигурации администратора, чтобы позволить клиенту определять свои собственные правила перезаписи URL-адресов). Преимущество: более высокая гибкость и независимость от платформы. Недостаток: потенциально может использовать больше системных ресурсов.

person SorinV    schedule 21.03.2009
comment
Почему вы используете разные стеки приложений для разработки и производства? Это напрашивается на неприятности. - person Robert Durgin; 09.10.2013