我只是用PHP开发一个小的WebApp,对于路由,我使用AltoRouter。
到目前为止,我只是离线开发和测试,所以在我的本地主机上。现在,为了查看服务器上的行为,我上传了我的代码,修复了数据库连接,以适应服务器上运行的MySQL服务器(即Ubuntu 14.04),并尝试启动它。
首先,我为路由所做的是一个简单的.htaccess
,看起来像这样:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /index.php [L]
然后,在我的index.php
中,路由完成
<?php
include 'vendor/altorouter/altorouter/AltoRouter.php';
$router = new AltoRouter();
$router->setBasePath('');
$router->map('GET','/','home.php','home');
$router->map('GET','/datenschutz','datenschutz.php','datenschutz');
$router->map('GET','/impressum','impressum.php','impressum');
$router->map('GET','/header','header.php','header');
$router->map('GET','/jquery','vendor/components/jquery/jquery.js','jquery');
$router->map('GET','/bootstrapjs','vendor/twbs/bootstrap/dist/js/bootstrap.js','bootstrapjs');
$router->map('GET','/bootstrapcss','vendor/twbs/bootstrap/dist/css/bootstrap.css','bootstrapcss');
$router->map('GET','/generalStyle','style.css','generalStyle');
$match = $router->match();
if($match) {
if($match['name'] === 'generalStyle'){
header("Content-Type: text/css");
$fileName = $match['target'];
echo file_get_contents($fileName);
return;
}
require $match['target'];
}
else {
header("HTTP/1.0 404 Not Found");
require '404.php';
}
?>
这在我的本地主机上运行得很好,所以一般不会出现问题。
然而,在我的服务器上,当转到IP时,首先似乎它正在工作,因为当只转到/
时,home.php
文件会正确加载。但是,无论我调用什么其他路由,比如/impressum
,它都不起作用,回到/
,home.php
又起作用了。
现在,用impressum.php
替换home.php
(在路由中)也可以工作,然后我也可以看到正确的文件。总之,这似乎只是第一条有效的途径。
有人知道为什么会发生这种情况,或者问题出在哪里吗?
我试着直接调用文件,(除了一些未加载的脚本等)它正在工作,所以转到myDomain.com/impressum.php
工作得很好,所以它似乎不是文件或东西的问题。
我还试着将洞项目的权限设置为755,以确保这不是问题,但结果相同。
有什么想法吗?
编辑:我试了很多次,但仍然没有成功。。。。然而,我想,这不是"第一条路线"在起作用,而是只有/
-路线在起作用。其他所有路由都不起作用,但同样,一切都在本地主机上运行XAMPP。。。
最后,我解决了这个问题。。
这一切都与PHP、AltoRouter、htaccess或其他什么无关。。。
解决方案是在我的vhost
-config…的Directory
中将AllowOverride
设置为All
。。。。