Помогите в PHP со switch

269
26 декабря 2017, 17:57

Делаю в скрипте подгрузку модулей в файле index.php с помощью switch и серверной директивы $_SERVER['SCRIPT_NAME'], но ничего не выходит.

Мне нужно, чтобы если пользователь ввёл адрес в браузере http://localhost/sign-in он попал на страницу авторизации.

Делаю вот так:

<?php
$action = $_SERVER['SCRIPT_NAME'];
switch($action) {
    case 'sign-in':
        require 'sign.php';
    break;
    default:
        echo 'Hello.';
}

При переходе по адресу http://localhost/sign-in выскакивает:

ошибка 404, файл не найден.

Что я делаю неправильно?

Answer 1

Для начала, вам нужно перенаправить все запросы в один файл, например index.php

Для этого создайте в корне сайта файл .htaccess и поместите туда этот код

<IfModule mod_rewrite.c>
RewriteEngine On
Options +FollowSymlinks
RewriteBase /
RewriteRule ^(.*)$ index.php [L,QSA]
</IfModule>

После этого можно обрабатывать запросы в указанном для перенаправления файле.

Что бы получить путь запроса - можно использовать эту строку parse_url($_SERVER['REQUEST_URI'])['path']

Всё, теперь можно проверять, но адрес всегда начинается с /, это значит что нужно проверять не sign-in, а /sign-in.

$path = parse_url($_SERVER['REQUEST_URI'])['path'];
switch($path) {
    case '/sign-in':
        echo 'Это адрес site/sign-in';
    break;
    default:
        echo 'Для этого адреса страница ещё не придумана';
}
Answer 2

Во-первых, чтобы при переходе на http://localhost/sign-in не выскакивала ошибка 404, в папке 'sign-in' должен быть файл index.php с Вашим скриптом.

Во-вторых, $_SERVER['SCRIPT_NAME'] возвращает имя скрипта. В переменной $action никак не может быть 'sign-in' - там '/sign-in/index.php'. Вот эту строку и пишите в case - тогда всё заработает.

READ ALSO
PHP Регистр имени файла и ошибка 404

PHP Регистр имени файла и ошибка 404

Столкнулась с проблемой при скачивании файла, имя которого написано с разным регистром, для примера patch-ruRU-103MPQ

234
OpenCart - как добавить перевод строки?

OpenCart - как добавить перевод строки?

Создал дополнительное условие при заказе товара, но никак не получается добавить перевод для этой строки

271
Как правильно наследовать модуль dektrium/yii2-user?

Как правильно наследовать модуль dektrium/yii2-user?

Всем привет! Использую модуль Yii2-userНужно было сделать так, чтобы при входе неавторизованного пользователя не было никакого меню, а только...

305
Какой API лучше использовать (С++)

Какой API лучше использовать (С++)

Имею задачу: написать программу, страющую маршрут БПЛ (беспилотника) по заданным точкам (долгота и широта)Причем лучше, если бы все это работало...

276