php Zend / MVC без mod_rewrite

Я видел, как это упоминалось во многих блогах в сети, но я считаю, что это следует обсудить здесь. Что мы можем сделать, если у нас есть инфраструктура MVC (меня интересует ZEND) на PHP, но наш хост не предоставляет mod_rewrite? Есть ли «короткие пути»? Можем ли мы каким-либо образом передать управление (чтобы могло происходить отображение между страницами)? Любые идеи? Спасибо :-)

Ответов (5)

Решение

Zend framework должен работать без mod_rewrite . Если вы можете жить с вашим URL: s больше похож на "/path/to/app/index.php/controller/action". Если бы у вас был mod_rewrite, вы могли бы отказаться от бит "index.php", но он тоже должен работать.

Все дело в настройке маршрутов для приема части index.php.

Если вы можете найти способ, не связанный с mod_rewrite, для перенаправления всех запросов на index.php (или там, где находится ваш сценарий инициализации), вы можете, как упоминалось выше, использовать REQUEST_URI, чтобы захватить часть адреса после домена, а затем проанализировать это как вам нравится, и заставьте запрос делать то, что вы хотите. Вот как это делает Wordpress (конечно, с mod_rewrite). Пока вы можете перенаправлять запросы на свою индексную страницу, сохраняя тот же URI, вы можете делать то, что вам нужно, для обработки запроса.

mod_rewrite почти необходим в сегодняшней среде хостинга ... но, к сожалению, не все поняли это сообщение.

Многие большие php-программы (я думаю, magento, но большинство из них могут справиться) имеют режим возврата с красивым URL-адресом, когда mod_rewrite недоступен.

URL-адреса в конечном итоге выглядят как www.site.com/index.php?load-this-page

Они должны запускать какую-то магию, чтобы получить имя переменной из переменной $ _GET и использовать ее в качестве селектора для того, какой модуль / функцию выполнять.

В соответствующей заметке я видел много испорченных URL-адресов на новом сайте facebook, где используется символ #. Таким образом, ссылки выглядят так: www.new.facebook.com/home.php#/inbox/ Очевидно, мы не должны этого видеть, но это предполагает, что они, вероятно, анализируют переменную $ _SERVER ['REQUEST_URI'].

Хорошо, мой вердикт :-): Я успешно использовал zend без mod_rewrite, и все, как вы все сказали, site / index.php / controller / action. Я знал это до того, как опубликовать это. Я также обнаружил в сети технику, которая «подталкивает» 404 страницы к index.php, поэтому туда попадает то, что не является ресурсом (например, CSS, изображение и т. Д.), За одним исключением: значения POST. Поэтому я решил, что в следующий раз, когда приложение будет создано на конкретном сервере, вежливо попросить mod_rewrite. Если администратор не может предоставить это, поговорите с моим начальником или, если это для меня, смените провайдера. Вообще иногда бывает обидно, что рынок PHP настолько фрагментирован (php4, php5, php6, mod_rewrite, mod_auth, mod_whatever), но это уже другая история ...

Правила перезаписи Drupal переводят

http://example.com/path/goes/here

в

http://example.com/index.php?q=path/goes/ здесь

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