AltoRouter无法正确进行路由

时间:2019-01-12 09:11:15

标签: php apache routing url-routing altorouter

我只是用PHP开发一个小型WebApp,并且使用AltoRouter进行路由。

到目前为止,我只在脱机开发和测试,所以在本地主机上。现在,要查看服务器上的行为,我上传了代码,修复了数据库连接以适合服务器上运行的MySQL-Server(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再次起作用。

现在,将home.php(在路由中)替换为impressum.php也可以正常工作,那么我也可以看到正确的文件。 因此,总而言之,似乎总是只有第一条可行的路线。

有人有一个主意,为什么会发生或者是什么问题?

我试图直接调用文件,并且(除了一些未加载的脚本等)可以正常工作,因此转到myDomain.com/impressum.php可以正常工作,因此似乎不是文件问题或某事。

我还尝试将Hole项目的权限设置为755,以确保这不是问题,但结果相同。

有什么想法吗?

编辑:我一直在尝试很多,但仍然没有奏效。...但是,我认为这不是“第一条路线”,而是/-路由正在运行。其他所有路由均不起作用,但是同样,一切都在运行XAMPP的localhost上运行。

1 个答案:

答案 0 :(得分:0)

最后,我解决了问题。

所有与PHP,AltoRouter,htaccess或其他无关...

解决方案是在df.million_values = df.dollar_values.apply(lambda x: x/1000000) 配置的AllowOverride中将All设置为Directory。...