我最近将我的应用程序从windows localhost迁移到了linux主机。
我的问题是我无法访问控制器,我总是收到消息:找不到文件。(来自网络服务器)
这很奇怪,因为相同的代码库正在我的localhost上工作。
bootstrap.php:
Route::set('default', '(<controller>(/<action>(/<id>)(/<param1>)(/<param2>)))')
->defaults(array(
'controller' => 'user',
'action' => 'index',
'param1' =>'',
'param2' =>'',
));
htaccess的:
# Turn on URL rewriting
RewriteEngine On
# Installation directory
RewriteBase /
# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]
这里发生的奇怪事情是,如果我去: www.myapp.com/然后默认控制器执行,它找到用户/索引函数。
但是,如果我手动将其写为www.myapp.com/user/index,我会继续收到“找不到文件”消息。
我已经尝试用小写重命名控制器文件,所以我想这不是问题,除非这是问题,默认路由不会在第一时间找到它,对吗?
例如,如果我写入默认路线:
Route::set('default', '(<controller>(/<action>(/<id>)(/<param1>)(/<param2>)))')
->defaults(array(
'controller' => 'user',
'action' => 'login',
'param1' =>'',
'param2' =>'',
));
我访问www.myapp.com,它会加载用户功能。我无法弄清楚这里有什么问题,为什么当我写myapp.com/user/login时它说找不到文件,但是如果我把它作为默认路由就打开它。
答案 0 :(得分:0)
你在bootstrap.php中设置了base_url吗?如果不是,则应设置base_url your_project_name /
如果是,您应该在.htaccess中设置RewriteBase / your_project_name /
答案 1 :(得分:0)
我在另一个与此相关的线程中找到了解决方案。您需要将这段代码添加到.htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
希望它可以帮助其他人!