Как изменить существующую постоянную ссылку (PHP, HTML, CSS) - PullRequest
0 голосов
/ 24 сентября 2019

У меня проблема с постоянной ссылкой (я думаю, что они называются постоянной ссылкой).Я занимаюсь разработкой WEB сайта с использованием PHP, HTML и CSS.Основная проблема заключается в том, что когда я отправляю данные на другую страницу, например:

<a href="project.php?id=1">Project</a>

Я получаю этот идентификатор в project.php, но в URL вместо mysite / project.php? Id = 1 вместо этогоКак я могу сделать так, чтобы это выглядело как этот mysite / проект, я хочу избавиться от .php? id = 1, но я хочу сохранить идентификатор на странице проекта.Я написал этот пост немного запутанно, но если вам нужна дополнительная информация, просто скажите.Заранее спасибо !!!

1 Ответ

0 голосов
/ 24 сентября 2019

Правильное имя для того, что вы описываете, это " дружественный URL " или "чистый URL".Да, это часто связано с понятием " постоянные ссылки ", которое описывает тот факт, что данный URL-адрес предназначен для постоянного действия;однако «постоянные ссылки» на самом деле не запрещают иметь аргументы запроса или хранить расширения файлов.

Как это работает

Теперь реализация дружественного URL в PHP всегда начинается с добавления некоторыхФорма обработчика местоположения на уровне веб-сервера.По сути, вам нужно, чтобы веб-сервер понимал, что запрос вида /mysite/project/<id> действительно должен быть делегирован какому-то конкретному PHP-скрипту (подробнее об этом позже).

Затем вам также потребуется некоторая форма маршрутизации.механизм, который будет декодировать исходный URL, решать, какое действие запрашивается и какие аргументы должны быть предоставлены;Например, этот механизм маршрутизации будет декодировать URL-адрес /mysite/project/2 и определять, что он должен возвращать шаблон страницы проекта, заполненный идентификатором проекта 2.

В сложных приложениях PHP эти две проблемы обычно рассматриваются отдельно.В этом случае в файл конфигурации веб-сервера будет добавлено одно правило, которое перенаправляет каждый запрос (за исключением запросов на статические ресурсы) в уникальную точку входа PHP, традиционно называемую «index.php».Затем некоторый алгоритм в этом файле будет проверять переменную $_SERVER['REQUEST_URI'], декодировать ее и определять, какую функцию PHP вызывать и с какими аргументами.Такой алгоритм обычно называют «маршрутизатором».Это, например, как работают такие приложения, как WordPress, Magento или Prestashop.

В качестве альтернативы, также возможно обрабатывать обе проблемы на уровне веб-сервера, и, как правило, это легче сделать в очень небольших проектах (обратите внимание,что есть плюсы и минусы этого подхода, который я не буду подробно обсуждать на данном этапе).В этом случае вы бы добавили в конфигурацию вашего веб-сервера одно правило перезаписи на шаблон URL, заменив дружественный URL его внутренним эквивалентом.Например, /mysite/project/<id> можно внутренне переписать в /mysite/project.php?id=<id>.

Как это сделать

Разработка маршрутизатора на основе PHP с нуля не так уж и сложна,но я бы не советовал вам это делать.Если вы думаете, что ваш проект может вырасти до такой степени, что наличие маршрутизатора на основе PHP может оказаться уместным, тогда может быть целесообразным рассмотреть возможность использования среды разработки, которая уже поддерживает маршрутизацию.Большинство PHP-фреймворков включают некоторую форму маршрутизации.Лично я не буду рекомендовать ничего, просто поищите в Google «фреймворки PHP».

Что касается реализации дружественных URL с помощью правил перезаписи на уровне веб-сервера, то синтаксис, очевидно, зависит от того, какой веб-сервер вы используете.Используем.Для этой цели большинство серверов поддерживают некоторую форму синтаксиса на основе регулярных выражений.

Например, используя nginx (см. документация по переписыванию nginx ), вы можете получить что-то вроде этого:

server {
    # ...

    rewrite "^/mysite/project/([0-9]+)$" /mysite/project.php?id=$1;

    # ...
}

Используя Apache httpd (см. Документация Apache mod_rewrite ), вы можете получить эквивалент, добавив его в файл .htaccess внутри корневого каталога вашего сайта:

RewriteEngine On
RewriteRule "^/mysite/project/([0-9]+)$" "/mysite/project.php?id=$1" [L]
...