XAMPP Virtualhost не маршрутизирует - PullRequest
0 голосов
/ 01 марта 2020


У меня есть проект, где все запросы отправляются в индекс. php с маршрутизацией в файле .htaccess.
К сожалению, это не работает в XAMPP Virtualhost.

Но когда я go в папку root и выполняю команду PHP -S 127.0.0.1:8080 или любой другой порт, система маршрутизации работает и. htaccess файл также работает.
Это доказывает, что с моим PHP кодом нет ничего плохого.
Чтобы уточнить: я могу достичь виртуального хоста, и он работает.
Но когда я добавляю /control, он говорит "Объект не найден", потому что control.php не существует. Но это должно привести меня к странице управления, потому что он должен отправить запрос на index.php.
Удаление расширения. php работает, поэтому /client работает, потому что есть файл с именем client.php. Так что .htaccess не игнорируется на этом.
Я также попытался набрать несколько случайных вещей в файле .htaccess и посмотреть, не выдаст ли это ошибку сервера, и это действительно так. Это также доказывает, что Virtualhost не игнорирует файл .htaccess.
Мой файл .htaccess:

RewriteEngine on  
RewriteBase /   
RewriteCond %{REQUEST_FILENAME} !-d            
RewriteCond %{REQUEST_FILENAME}\.php -f        
RewriteRule ^(.*)$ /index.php?q=$1 [NC,L,QSA]  

Файл httpd-vhosts.conf:

<VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs/example"
    ServerName example.com
    ServerAlias www.example.com
    <Directory "C:\xampp\htdocs\example">
        AllowOverride All
    </Directory>
</VirtualHost>

Кто-нибудь знает решение этой проблемы?
С уважением,
РЕДАКТИРОВАТЬ 1
Я добавил к httpd-vhosts.conf строку DirectoryIndex index.php, и она выглядит так:

<Directory "C:\xampp\htdocs\example">
     DirectoryIndex index.php
     AllowOverride All
</Directory>

EDIT 2
После некоторого тестирования я обнаружил, что правило маршрутизации для /login работает. Мой index.php файл:

<?php
// For Routing, I use the library AltoRouter: https://altorouter.com/
session_start();
require '../vendor/autoload.php';
require __DIR__ .'/includes/PHP/logout.inc.php';
$router = new AltoRouter();
$router->map('GET', '/', function() {
    require __DIR__ . '/homepage.php';
});
$router->map('GET', '/405', function() {
    echo '405';
});
$router->map('GET', '/login', function() {
    require __DIR__ .  '/login.php';
});
$router->map('GET', '/beheer', function() {

    require __DIR__ . '/beheer.php';
});
$router->map('POST', '/uitloggen', function() {
    $confirmation = TRUE;
    logout($confirmation);
});
$router->map('GET', '/client/[i:id]', function() {
    require __DIR__  ."/client.php";
});
$router->map('GET', '/car/*', function() {
    require __DIR__ . "/auto.php";
});
$match = $router->match();
if(is_array($match) && is_callable($match['target'])) {
    call_user_func_array($match['target'], $match['params']);
} else {
    echo '404';
}

Когда я изменил правило для /login на echo 'login', оно фактически напечатало сообщение 'login', так что это также доказывает, что это работает, но не полностью по какой-то причине. И когда я изменяю правило /beheer на /control, (существует control.php), а затем я изменяю строку require __DIR__ . '/control.php на echo 'control, она печатает сообщение «control». Таким образом, похоже, что XAMPP перенаправляет только на index.php, если путь в URL-адресе действителен и существует. Любой способ решить это?
РЕДАКТИРОВАНИЕ 3 И РЕШЕНИЕ
Через некоторое время я понял, что могу также просто отправить все 404 ошибки index.php файл, а затем обработать реальные 404 ошибки в файле index.php.
Итак, я только что добавил: ErrorDocument 404 index.php в файл .htaccess.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...