Как заменить url типа — «/page.php?id=4» на «/contact» и т.п.? [закрыт]

137
18 мая 2019, 12:10

Подскажите, как заменить url типа — «/page.php?id=4» на «/contact» (или другое, взависимости от столбца title в БД). Если можно, простой пример

Answer 1

.htaccess

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

index.php

/* Получаем URL в переменную $result в случае yourdomain.com/name-page.html в $result окажется строка: /name-page.html */
$result = $_SERVER['REQUEST_URI'];
/* проверяем, что бы в URL не было ничего, кроме символов алфавита (a-zA-Z), цифр (0-9), а также . / - _ # в противном случае - выдать ошибку 404 */
if (preg_match ('/([^a-zA-Z0-9\.\/\-\_\#])/', $result)) {
    header('HTTP/1.0 404 Not Found');
    echo 'Недопустимые символы в URL';
    exit;
}
/* отбрасываем из ЧПУ всё лишнее, оставляя только имя виртуального html-файла. В случае с  yourdomain.com/name-page.html это будет name-page функция preg_split формирует массив, разбивая переданную строку по заданной маске. */
$array_url = preg_split ('/(\/|\..*$)/', $result,-1, PREG_SPLIT_NO_EMPTY);
/* в случае, если обращение было только к домену (yourdomain.com/ или yourdomain.com), в $array_url будет пустой результат, такое событие нужно обработать, как страницу с ID_page = 1 */
if (!$array_url) {
    $ID_page = 1;
}else{
    $sef_value = $array_url[0];
/* Далее идёт запрос в БД о наличие в столбце SEF строки $sef_value при положительном ответе получаем из БД соответствующий $sef_value $ID_page, если такой строки не найдено - выводим страницу ошибки 404. */
}
/* Теперь обычная обработка, как если бы $ID_page был получен методом GET */

Это не лучший пример, но он должен помочь. Детальнее про организацию ЧПУ

READ ALSO
Несколько роутов или один роут и условия в нём?

Несколько роутов или один роут и условия в нём?

Недавно возник довольно интересный вопрос о том, как лучше строить Rest APIУсловно говоря, есть два варианта: 1

142
Nested sets - нужна только для каталогов? Нужна ли таблица для конечных элементов?

Nested sets - нужна только для каталогов? Нужна ли таблица для конечных элементов?

Во всех статьях про модели Nested Sets я не смог понять для каких данных она нужнаТо есть приведу пример:

128
Сортировка массива по дате php

Сортировка массива по дате php

Есть массив формата

138
Как передать аттачи через FormData и правильно принять их на php для отправки ф-ей mail()

Как передать аттачи через FormData и правильно принять их на php для отправки ф-ей mail()

Пытаюсь сделать возможность удалять вложения перед отправкой, и потом отправитьРеализацию нашел, но требуется помощь

151