Как решить случай, когда пользователи переходят на index.php - PullRequest
3 голосов
/ 23 мая 2009

В среде Zend, используя MVC, если пользователь явно использует http://base/url/index.php вместо http://base/url, Система считает, что реальный базовый URL равен http://base/url/index.php/ и в соответствии с этим вычисляет все URL в системе.

Итак, если у меня есть контроллер XXX и действие YYY, ссылка будет
http://base/url/index.php/XXX/YYY что, конечно, неправильно.

Я сейчас решаю эту проблему, добавив строку в index.php:

$_SERVER["REQUEST_URI"]=str_replace('index.php','',$_SERVER["REQUEST_URI"]);

Мне интересно, есть ли встроенный способ в ZF для решения этой проблемы.

Ответы [ 6 ]

5 голосов
/ 23 мая 2009

Вы можете сделать это с ZF, используя Zend_Controller_Router_Route_Static (фу!), Пример:

Прочтите ссылку на страницу руководства, приведенную выше, есть несколько довольно хороших примеров.

$route = new Zend_Controller_Router_Route_Static(
    'index.php',
    array('controller' => 'index', 'action' => 'index')
);
$router->addRoute('index', $route);

Не могу сказать, что я полностью не согласен с вашим подходом. Тем не менее, другие могут указать на 5000 или около того недостатков. Удачи с этим.

2 голосов
/ 23 июля 2009

Использовать mod_rewrite. Примерно так должно это сделать:

RewriteRule ^index.php/(.*)$ /$1 [r=301,L]
2 голосов
/ 23 мая 2009

Ну, это действительно зависит от того, как вы хотите решить эту проблему. Как вы знаете, Zend Frameworks строится на шаблоне фронт-контроллера, где каждый запрос, который явно не ссылается на файл в каталоге / public, перенаправляется на index.php . Таким образом, вы можете решить эту проблему несколькими способами:

  1. Отредактируйте файл .htaccess (или директиву конфигурации сервера), чтобы переписать запрос в нужный запрос:
    • RewriteRule (. * Index.php) / ошибка / запрещено? Req = $ 1 // Переписать запрещенное действие контроллера ошибок.
    • RewriteRule index.php / index // Переписать запрос к главному контроллеру и выполнить действие
  2. Добавьте статический маршрут в ваш загрузчик, как предложено karim79 .
0 голосов
/ 22 июля 2009

Я смотрю на это так: если у меня есть веб-сайт, работающий на PHP и пользователь переходит на http://site/index.aspx, я бы отправил 404.

Несмотря на то, что index.php теоретически существует, это недопустимый URL в моем приложении, поэтому в этом случае я бы также отправил 404.

0 голосов
/ 23 мая 2009

Я никогда не сталкивался с этой проблемой при использовании Zend Framework. просто не ссылаться на файл index.php. вот и все. и когда вы даете адрес вашего приложения пользователям, просто скажите им, чтобы перейти к http://base/url/

когда пользователь вводит http://base/url/ его URI запроса равен base / url и ваш файл .htaccess направляет запрос в index.php, но запрос IS базовый / URL . вам не нужно удалять index.php из запроса. потому что его там нет.

когда вы пытаетесь сгенерировать URL для ссылок и форм и ..., используйте встроенный помощник вида url () для генерации ваших ссылок. как это:

// in some view script
<a href="<?php
  echo $this->url( array('controller'=>'targetController','action'=>'targetAction') );
         ?>" >click</a>

Не беспокойтесь о ссылке. Zend сгенерирует для вас URL.

0 голосов
/ 23 мая 2009

Не думаю, что для этого нужно использовать маршрут.

Это своего рода общая проблема, которая не может быть решена таким образом.

Вам лучше сделать это в вашем .htaccess, который предложит вам лучший и простой способ перенаправить пользователя туда, куда вы хотите, например, на страницу с ошибкой или на индекс.

Вот страница документации для mod_rewrite

...