Как удалить index.php в Yii Framework - PullRequest
13 голосов
/ 09 марта 2012

enter image description here Эй, парень, я новичок в Yii Framework. Я хочу удалить index.php из моих URL. Следуя документации yii, когда я помещаю код механизма перезаписи в мой файл .htaccess и устанавливаю значение showScriptName в false в моем файле config / main.php, я получаю внутреннюю ошибку сервера 500. Мой файл .htaccess находится в корневой папке моего приложения. Скажи мне, где я делаю не так

UPDATE:

Это код в моем файле .htaccess:

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php

Ответы [ 9 ]

15 голосов
/ 09 марта 2012

Попробуйте это

Хорошее описание доступно здесь

http://www.yiiframework.com/doc/guide/1.1/en/topics.url#hiding-x-23x

6 голосов
/ 30 августа 2012

Если вы также хотите удалить /index из URL главной страницы, добавьте ''=>'site/index' в начало правил urlManager, например:

'urlManager'=>array(
    'urlFormat'=>'path',
    'showScriptName' => false,
    'rules'=>array(
        ''=>'site/index',
        '<action>'=>'site/<action>',
3 голосов
/ 23 апреля 2013

Выполните эти 3 шага:

  1. Включите перезапись URL на Apache.

  2. Поместите .htaccess в корень вашего проекта

RewriteEngine на

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . index.php
  1. В вашей конфигурации protected / config / main.php установите для showScriptName значение false, как это для вашего менеджера URLкомпоненты >> urlManager
'urlManager'=>array(
  'urlFormat'=>'path',
  'rules'=>array(
      '<controller:\w+>/<id:\d+>'=>'<controller>/view',
      '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
      '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
  ),
  'showScriptName'=>false,
)
3 голосов
/ 23 октября 2012

взято непосредственно из документации yii

Скрытие index.php Есть еще одна вещь, которую мы можем сделать для дальнейшей очистки наших URL-адресов, т.е. скрытие индекса сценария входа.PHP в URL.Это требует от нас настройки веб-сервера, а также компонента приложения urlManager.

Сначала необходимо настроить веб-сервер таким образом, чтобы URL-адрес без сценария входа мог по-прежнему обрабатываться сценарием входа.Для HTTP-сервера Apache это можно сделать, включив механизм перезаписи URL и указав некоторые правила перезаписи.Мы можем создать файл /wwwroot/blog/.htaccess со следующим содержимым.Обратите внимание, что то же содержимое можно также поместить в файл конфигурации Apache в элементе Directory для /wwwroot/blog.

RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php

Затем мы настраиваем свойство showScriptName компонента urlManager длябыть ложным.

Теперь, если мы вызовем $ this-> createUrl ('post / read', array ('id' => 100)), мы получим URL / post / 100.Что еще более важно, этот URL-адрес может быть правильно распознан нашим веб-приложением.

Надеюсь, это поможет, потому что решил и мою проблему.

1 голос
/ 11 сентября 2014

измените ваш config / main.php, как показано ниже:

'urlManager'=>array(
        'urlFormat'=>'path',
        'showScriptName'=>false,
        'caseSensitive'=>false,
        'rules'=>array(
            '<controller:\w+>/<id:\d+>'=>'<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
            '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
        ),

затем поместите файл htaccess в базовый каталог с защищенной папкой (он может быть внутри защищенной папки) поместите приведенный ниже код в свой файл htaccess

RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php

или попробуйте с этим ---

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA]

сделано ... надеюсь, что это будет работать

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

изменить значения конфигурации Apache

AllowOverride none для AllowOverride ALL

в httpd.conf или httpd-vhosts.conf

0 голосов
/ 26 июля 2015

Убедитесь, что если после всех ваших изменений в .htaccess & urlManager, если он все еще не работает ни для кого из вас, вы изменили параметр AllowOverride для корневого каталога в файле Apache httpd.conf на «Всевместо «Нет».После модификации перезапустите apache.Потому что это параметр, который позволяет apache решать, какие параметры можно переопределить в файле .htaccess

0 голосов
/ 14 июня 2014

У меня также была эта проблема сегодня, когда я перевел свой проект на сервер Linux.Я сделал все способы, которые показаны, но не помогли.Затем я скопировал файл .htaccess в каталог защищенный , затем он заработал.

0 голосов
/ 24 марта 2013

Я только что наткнулся на эту ветку, но обнаружил, что для того, чтобы она работала, мне нужно было не только следовать инструкциям по добавлению файла .htaccess, но и раскомментировать раздел ниже из моего основного файла конфигурации (\ protected \ config \ main.php):

        // uncomment the following to enable URLs in path-format

    'urlManager'=>array(
        'urlFormat'=>'path',
        'rules'=>array(
            '<controller:\w+>/<id:\d+>'=>'<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
            '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
        ),
    ),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...