Я просто разрабатываю небольшое WebApp на PHP и для маршрутизации использую 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
снова работает.
Теперь замена home.php
(в маршруте) на impressum.php
также работает, тогда я вижу и нужный файл.
Подводя итог, кажется, что это всегда только первый маршрут, который работает.
У кого-нибудь есть идея, почему это происходит или в чем проблема?
Я пытался вызывать файлы напрямую, и (кроме некоторых не загруженных скриптов и т. Д.) Он работает, поэтому переход к myDomain.com/impressum.php
работает нормально, поэтому, похоже, это не проблема файла или sth.
Я также попытался установить разрешение для проекта отверстия 755, чтобы убедиться, что это не проблема, но результаты те же.
Есть идеи?
РЕДАКТИРОВАТЬ: Я много пробовал, но все равно не получилось ... Однако я понял, что это не "первый маршрут", а только /
- роут, который работает. Любой другой маршрут не работает, но опять же, все работает на локальном хосте с запущенным XAMPP ...