Как решить случай, когда пользователи переходят на index.php

В среде Zend, использующей MVC, если пользователь A явно просматривает 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 ответов

Решение

Вы можете сделать это с 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 или около того недостатков. Удачи с этим.

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

RewriteRule ^index.php/(.*)$ /$1 [r=301,L]

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

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

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

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

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

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

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

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

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

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

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

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

не беспокойся о ссылке. Zend создаст для вас URL.

Другие вопросы по тегам