Я не получаю актуальный вопрос здесь.Чтобы это работало, вам нужно иметь файл .htaccess с включенным mod_rewrite на вашем сервере Apache, который, я полагаю, у вас есть.При использовании таких URL-адресов у вас должен быть некоторый класс URIDispatcher, чтобы четко видеть каждую деталь из запрошенного URL-адреса.Итак, дело в том, что вы должны проверить несколько вещей, а затем исправить их в зависимости от того, как ваш код отвечает на них:
Правильно ли сформирован URI?
Прежде всего, на вашем контроллересценарий, проверьте, если REQUEST_URI
, чтобы увидеть, все ли правильно, в начале сценария введите:
<?php
die($_SERVER['REQUEST_URI']);
URI правильно сформирован?Извлеките идентификатор
Поскольку вы используете URL без параметров (base_uri?id=1
), давайте используем метод explode()
для разделения URI отверстия:
$uri_array = explode('/', $_SERVER['REQUEST_URI']);
Поскольку ваш URI/website/app/app/edituser/1
, теперь у вас будет массив с позицией 0, содержащий пустую строку.Это нормальное поведение, просто используйте $final_uri_array = array_filter($uri_array);
. Обратите внимание, что array_filter () удаляет идентификатор, если он равен нулю. .Если все идет хорошо, идентификатор должен быть в $final_uri_array[4]
.Теперь давайте проверим ваш контроллер.
Проверка значения и перенаправление
Ваш код на вашем контроллере может выглядеть примерно так:
<?php
//Your stuff
public function edituser(){
$final_uri_array = array_filter( explode('/', $_SERVER['REQUEST_URI']) );
if(sizeof($final_uri_array) < 5){
//400 Bad request
http_response_code(400);
} else {
/*
* Check ID existence from your database
* Should look womething like this
*/
$user_id = intval($final_uri_array[4]);
$user_data = $database->search($user_id);
if($user_data->num_rows > 0){
//If the user was found, redirect to a page
header('Location: /your/edit/view/uri');
} else {
//404 Not found
http_response_code(404)
}
}
}
//More stuff