Использовать длинный список .htaccess RewriteRule или использовать единый и прямой подход в PHP? - PullRequest
3 голосов
/ 28 января 2012

Скажите, что я использую файл .htaccess для чистых ссылок, но у меня есть длинный список (скажем, 20) RewriteRules для таких вещей

domain.com/user/adam --> domain.com/user.php?need=user&user=adam
domain.com/test.js --> domain.com/index.php?need=code&file=test.js
domain.com/test.js/edit --> domain.com/index.php?need=code&file=test.js&action=edit

Лучше использовать перехват всех RewriteRuleи разделить на косую черту / разбирать и направлять в PHP?Или длинный список RewriteRule лучше?

Лучше, я думаю, я имею в виду быстрее и надежнее.Я знаю, что поддержание было бы лучше с помощью catch all.

Кроме того, можете ли вы порекомендовать пример / статью класса php по этому поводу?

Ответы [ 2 ]

1 голос
/ 31 января 2012

Если это отвечает вашим запросам, нет проблем с использованием огромного списка правил перезаписи. Я видел правила перезаписи, которые заполняют весь мой монитор, а затем и некоторые - с огромным списком проблем нет, если у вас нет проблем с ними.

0 голосов
/ 31 января 2012

Возможно, вы захотите взглянуть на ZendRouter - даже если вы не используете фреймворк, вы можете следовать их идеям.

http://framework.zend.com/manual/en/zend.controller.router.html

По сути .htaccess направляет все запросык файлу index.php, за исключением любых совпадений с RegEx:

RewriteRule !\.(js|ico|gif|jpg|png|css|html)$ index.php

или любыми не файлами / каталогами (хотя я думаю, что стоит немного дороже проверить, существует ли файл / каталог, а нечем регулярное выражение запрошенного URL)

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Как только вы используете этот тип маршрутизации - вы можете определить стандартное регулярное выражение для URL-адресов для сопоставления с контроллерами / действиями

...