Привет, парень, я новичок в Yii. Я хочу удалить index.php из моих URL-адресов. После документации yii, когда я поместил код двигателя rewrite в мой файл .htaccess и установил showScriptName в false в файле config / main.php, я получаю ошибку внутреннего сервера 500. Мой файл .htaccess находится в корневой папке моего приложения. Скажи мне, где я делаю неправильно
ОБНОВИТЬ:
Это код в моем файле .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-адресов, т. Е. Скрытия скрипта ввода index.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 как 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 в защищенный каталог, затем он сработал.
Убедитесь, что если после всех изменений в .htaccess & urlManager, если он все еще не работает никому из вас, это то, что вы изменили свой параметр AllowOverride для корневого каталога в файле Apache httpd.conf на «Все» вместо "Никто". После модификации перезапустите apache. Поскольку это параметр, который позволяет apache решить, что все параметры могут быть переопределены в файле .htaccess
изменить значения конфигурации apache
AllowOverride none для AllowOverride ALL
в httpd.conf или httpd-vhosts.conf