如Yii论坛/指南中所述,我使用htaccess从我的url中删除了index.php。它在安装了Xampp的Windows PC上运行良好。但当我在y共享主机上上传它时,只加载主页。所有其他链接都出现404错误。
My.Htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
当我联系我的主机支持团队时,他们告诉我已启用mode_rewrite。
我的main.config内容是
'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>',
'gii' => 'gii/<controller>',
'admin' => 'admin/default/index',
'admin/<controller:'w+>' => 'admin/<controller>',
'admin/<controller:'w+>/<action:'w+>/<id:'d+>'=>'admin/<controller>/<action>',
'admin/<controller:'w+>/<action:'w+>'=>'admin/<controller>/<action>',
'gii' => 'gii/default/index',
'gii/<controller:'w+>' => 'gii/<controller>',
'gii/<controller:'w+>/<action:'w+>/<id:'d+>'=>'gii/<controller>/<action>',
'gii/<controller:'w+>/<action:'w+>'=>'gii/<controller>/<action>',
),
'showScriptName'=>false,
),
我尝试了许多解决方案,但都徒劳无功。请帮助
请改用RewriteRule . /index.php
,注意起始斜杠。
否则,路径是相对的,因此http://somedomain.com/path/
将重定向到http://somedomain.com/path/index.php
,而不是http://somedomain.com/index.php
。
配置文件中的Url管理器必须类似于以下
'urlManager' => array(
'urlFormat' => 'path',
'showScriptName' => false,
'rules' => array(
'home' => '/site/index',
'cms' => '/site/contentview',
'register' => '/site/register',
'login' => '/site/login',
......),
),
.htaccess必须像这个
Options +FollowSymLinks
IndexIgnore */*
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
从localhost(windows或Mac)复制到服务器(linux)时最常见的问题是区分大小写,请在控制器上检查大小写。
此外,请检查虚拟主机定义中的AllowOverride
指令。
<Directory /path/to/website>
AllowOverride All
Require all granted
</Directory>
否则即使启用了CCD_ 6,重写规则也将不起作用。
来源:http://www.yiiframework.com/forum/index.php/topic/30739-404-errors-on-apache2-ubuntu/page__p__148021__hl__404+错误#entry1480021
我遇到了同样的问题,请检查您是否遵循控制器的命名约定MyC控制器的第一个let和控制器的"C"必须大写。