Лучше обращаться с дружественными/чистыми/симпатичными URL с mod_rewrite или языком как PHP?

Я развиваю свой первый сайт PHP достойного размера, и я немного смущен тем, что «правильный путь» (принимающий когда-либо есть такая вещь) обращаться с чистыми/дружественными/симпатичными URL в применении.

Путем я вижу его, есть два главных варианта (я буду использовать упрощенный социальный сайт новостей в качестве примера):

1. Используйте mod_rewrite, чтобы обращаться со всеми потенциальными URL. Это выглядело бы подобным, но не идентичное к следующему:

RewriteRule ^article/?([^/]*)/?([^/]*)/?([^/]*) /content/articles.php?articleid=$1&slug=$2
RewriteRule ^users/?([^/]*)/?([^/]*) /content/users.php?userid=$1&username=$2
RewriteRule ^search/?([^/]*)/? /content/search.php?query=$1

2. Передайте все к некоторому сценарию укладчика и позвольте ему волноваться о деталях:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) handler.php?content=$1

Очевидно это все не проверено «воздушный кодекс», но Вы понимаете.

  • Один из этих двух путей собраться быть серьезно медленнее, чем другой? По-видимому, mod_rewrite медленнее, так как я буду вынужден использовать .htaccess файлы для этого.
  • Там серьезные недостатки к любому из этих подходов?
  • Есть ли «лучшая практика» для этого вида вещи или это что-то, что каждый разработчик склонен решать для себя? Я знаю, что WordPress использует выбор два (хотя это было больше проблемы, чем это стоило, когда я занялся расследованиями точно, как они сделали это).
9
задан AgentConundrum 23 January 2010 в 11:21
поделиться

5 ответов

Вариант 1 (. HTACCESS и несколько .php-файлов) часто использовали «в прошлом»; Теперь я вижу вариант 2 (каждый запрос проходит через один .php-файл) используется намного больше.

Основные преимущества, которые я вижу с вариантом 2:

  • Вы можете добавить / изменить любой вид URL без необходимости менять физический файл, такой как .htaccess
    • Это означает, что формат URL-адресов может быть сконфигурирован в разделе «Администратор вашего приложения», например
  • У вас только только одна точка входа к вашему PHP-коду.
    • Это означает, что все идет index.php : Если вам нужен какой-код, выполненный для всех запросов, поместите его туда, и вы уверены, что он всегда будет выполнен.
    • , например, многое используется с MVC Frameworks.


Пару лет назад я бы пошел с вариантом 1; Теперь, когда я использую MVC и Frameworks, я всегда хожу с вариантом 2.

5
ответ дан 4 December 2019 в 15:18
поделиться

Действительно, это «рамочные материалы, которые стоит использовать?» Вопрос в маскировке.

Использование MOD_REWRITE Чтобы определить ваши маршруты URL быстрым и простым (если вы понимаете регулярные выражения ...) Но код вашего приложения не замечает URL-адреса, если вы не дублируете информацию где-то.

Обычно люди много раз дублируют эту информацию, не думая об этом, путем жесткокодирующих URL в ссылках на их взглядах или в перенаправлении. Это действительно грязно, и однажды приведет к боли, когда вы решите изменить структуру URL вашего сайта на полпути через разработку. Вы обязаны пропустить один и в конечном итоге с 404 где-то.

Использование компонента маршрутизации в вашем приложении (например, один в Symfony ) означает, что вы можете прикрепить имена к своим маршрутам, что позволяет определить ваши URL-адреса один раз и повторно использовать их много раз:

# apps/frontend/config/routing.yml
homepage:
  url:   /
  param: { module: default, action: index }

Это делает его очень легко связать на страницах вашего сайта, не повторяя себя:

<?php echo url_for('@homepage') ?>
4
ответ дан 4 December 2019 в 15:18
поделиться

Использовать вариант № 2 - Почему? Переписать в .htaccess - это мощный инструмент, но они какой-то статический . Я имею в виду, что вы не можете легко управлять, а затем использовать PHP (или все, что вы собираетесь использовать). Кроме того .htaccess не обеспечивает столько гибкости, но имеет некоторые преимущества (например: это немного быстрее).

Вариант № 2 также нужен .HTACCESS , как вы заметили, но в большинстве случаев Rewriterule принимает следующую форму:

RewriteRule (.\*) index.php

где index.php Ваш передний контроллер.

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

Я думаю, что следующий пример (из Symfony Framework) объяснит, о чем я говорю:

// apps/.../config/routing.yml - Describes routing rules
post:
   url:          /read/:id/:slug
   params:       { module: blog, action: index }
   requirements: { id: \d+, slug: \w+ }

// apps/.../modules/blog/templates/indexSuccess.php - template for index action
<?php echo link_to($post['title'], '@post?id=' . $post['id'] . '&slug=' . $post['slug']); ?>
//creates: <a href="/read/123/my-first-blog-post.html">My first blog post</a>

Теперь, когда вы меняете rounting.yml файл и изменить / READ /: ID /: : slug в /: Slug_: ID Все ваши ссылки в приложении будут превращаться в /my-first-blog-post_123.html .

Делать такие и другие вещи, когда вы используете опцию № 2, намного проще.

2
ответ дан 4 December 2019 в 15:18
поделиться

Насколько я вижу, любые возможные различия в производительности между этими методами действительно MISCULE и актуальны только на самом деле, действительно высокопоставленные места.

Я думаю, что нет «лучшей практики» как таковой, оба метода одинаково используются. Если ваша структура проекта позволяет ей, и вы больше дома с анализом URL в PHP (где остальная часть вашего проекта), поместите все через один файл контроллера, и позвольте вашему приложению обрабатывать остальные.

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

1
ответ дан 4 December 2019 в 15:18
поделиться

Чистые симпатичные URL-адреса, по-видимому, оказываются популярным системой управления контентом PHP-скрипта, используя комбинацию .

Учитывая успех и популярность этого инструмента - и его способность работать на самом скромном общем хостинге, я думаю, что это будет ваш ответ.

1
ответ дан 4 December 2019 в 15:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: