Как изменить внешний вид URL из скрипта PHP - PullRequest
1 голос
/ 06 декабря 2011

У меня есть несколько PHP и HTML в одном файле, и я не совсем уверен, как сделать так, чтобы URL отображался как имя этой страницы.

Вот пример того, что я хотел бы сделать: скажем, некоторый идентификатор страницы = 1, и заголовок этой страницы - HelloWorld.

Вместо site.com/page.php?id=1 я бы хотел, чтобы URL отображался как site.com/HelloWorld

Но проблема, с которой я сталкиваюсь, заключается в том, что я узнаю заголовок страницы внутри этой страницы только после того, как я запрашиваю заголовок по идентификатору.

Учитывая настройку, которую я описал, есть ли способ, чтобы URL отображались как названия страниц? А также, если кто-то ссылается на эту страницу, используя более привлекательный URL-адрес с именем страницы вместо идентификатора, есть ли еще способ получить идентификатор и тем самым остальное содержимое страницы?

Спасибо !!

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

Это на самом деле функция программного обеспечения вашего сервера HTTP (часто Apache), а не PHP.

То, что вы видите на сайтах с «дружественными» URL-адресами, заключается в том, что понятное имя фиксируется в регулярном выражении и затем передается в PHP.

Например:

GET /HelloWorld

отправлено на ваш веб-сервер .. веб-сервер анализирует его

RewriteCond ^(A REGULAR EXPRESSION TO CAPTURE YOUR FRIENDLY NAME)$
RewriteRule page.php?id=(EXPRESSION FROM ABOVE)

Таким образом, ваш PHP-скрипт всегда получит понятное имя в качестве параметра.

Взгляните на "mod_write" для Apache - который вы часто можете создавать правила для использования файла ".htaccess" в корневом каталоге.

1 голос
/ 06 декабря 2011

Вам нужно больше узнать о том, как работает .htaccess.

Вот хорошая ссылка, с которой я начал:

.htaccess трюки и советы

Обновление:

Это очень распространенная практика во многих средах, когда все запросы отправляются в index.php, и оттуда вы используете php для обслуживания правильной страницы:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://www.site.com/index.php [L,R=301]
</IfModule>
...