Ответ 1
Попробуйте это
Хорошее описание доступно здесь
http://www.yiiframework.com/doc/guide/1.1/en/topics.url#hiding-x-23x
Привет, парень, я новичок в Yii. Я хочу удалить index.php из моих URL-адресов. После документации yii, когда я поместил код двигателя rewrite в мой файл .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
Попробуйте это
Хорошее описание доступно здесь
http://www.yiiframework.com/doc/guide/1.1/en/topics.url#hiding-x-23x
Если вы также хотите удалить /index
из URL главной страницы, добавьте ''=>'site/index'
в начало ваших правил urlManager, например:
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName' => false,
'rules'=>array(
''=>'site/index',
'<action>'=>'site/<action>',
взято непосредственно из документации yii
Скрытие index.php Еще одна вещь, которую мы можем сделать для дальнейшей очистки наших URL-адресов, т.е. Скрытия записи script index.php в URL-адресе. Это требует от нас настройки веб-сервера, а также компонента приложения urlManager.
Сначала нам нужно настроить веб-сервер так, чтобы URL-адрес без записи script все равно мог обрабатываться записью script. Для 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 как false.
Теперь, если мы будем называть $this- > createUrl ('post/read', array ('id' = > 100)), мы получим URL/post/100. Что еще более важно, этот URL-адрес может быть правильно распознан нашим веб-приложением.
Надеюсь, это поможет, потому что также решила мою проблему.
Сделайте эти 3 шага:
Включить перезапись Url на Apache.
Поместите .htaccess в корневой каталог вашего проекта
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
'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, )
измените конфигурацию /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]
сделано... надеюсь, что это сработает
Я только наткнулся на этот поток, но обнаружил, что для его работы я не только должен был следовать инструкциям для добавления файла .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>',
),
),
У меня была и эта проблема сегодня, когда я переместил свой проект на Linux-сервер. Я сделал все, что показано, но не помогло. Затем я скопировал файл .htaccess в каталог protected, затем он сработал.
Убедитесь, что если все ваши изменения в .htaccess и urlManager, если они все еще не работают никому из вас, это то, что вы изменили свой параметр AllowOverride для корневого каталога в файле Apache httpd.conf на "Все" вместо "None". После модификации перезапустите apache. Поскольку это параметр, который позволяет apache решить, что все параметры могут быть переопределены в файле .htaccess
изменить значения конфигурации apache
AllowOverride none to AllowOverride ALL
в httpd.conf или httpd-vhosts.conf