Почему некоторые URL-адреса веб-сайтов не показывают расширение .php, а просто отображают такие слова, как stackoverflow.com/questions/ask - PullRequest
1 голос
/ 03 декабря 2010

Здравствуйте, ребята. Мне было интересно, почему некоторые веб-сайты, использующие php (или любой другой язык сценариев на стороне сервера), не показывают расширение и даже файл.как этот urlчто-пользователь-опубликовал-идет-здесь, и если мы пытаемся перейти на domain.com/post/, мы получаем ошибку на странице не найдена.

Я задаю этот вопрос, потому что я хочу знать, чтоиспользуется метод и связан ли он с php?и потому что я хочу использовать это.

Ответы [ 7 ]

2 голосов
/ 03 декабря 2010

Это потому, что они используют Apache mod_rewrite:

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

Вы можете легко перенаправить URL-адреса с ним, поэтому, если хотите, вы можете указать /test, например, /pages/test.html.

RewriteEngine on
RewriteRule   test  /pages/test.html

Обычно люди используют regex для динамического изменения маршрута, например:

RewriteEngine on
RewriteRule ^page/([^/\.]+)/?$ index.php?page=$1 [L]

Так /page/test-page покажет index.php?page=test-page

0 голосов
/ 03 декабря 2010

Способ достижения этого прост. Когда пользователь указывает на каталог, сервер ищет корень этого каталога (index.php).

Итак, в вашем примере domain.com/post/ у вас будет каталог (папка) с именем post. Внутри этой папки у вас будет index.php. Сервер вернет файл index.php в этой папке, и URL не будет отображать файл php, только URL domain.com/post/.

Если бы сервер отображал php-файл, он бы выглядел примерно так: domain.com/post/index.php, однако index.php не отображается.

Цель, как и другие, которые прокомментировали, предназначена для SEO (поисковая оптимизация), а также для защиты в случае, если вы измените то, на чем вы разрабатываете свой сайт, вы не потеряете свои SEO-ссылки или создадите мертвые ссылки, когда люди делают закладки на ваш сайт.

0 голосов
/ 03 декабря 2010

То, о чем вы говорите, - это поисковая оптимизация (SEO) URL.

См. Как сделать ваши URL-адреса более дружественными для SEO и SEO-дружественные URL-адреса в PHP для получения более подробной информации, поскольку эта тема очень хорошо задокументирована уже здесь, на SO и в Интернете в целом.

0 голосов
/ 03 декабря 2010

Веб-сервер контролирует, какие запросы отправляются каким программам. Самый простой метод - это то, что вы описали, когда domain.com/folder/file.ext отправляется обработчику для файла. Это может быть PHP в случае файла .php, или файл может отображаться как есть, в случае файла HTML.

Другая возможность - это то, что описал benhowdle89, что также является поведением по умолчанию для большинства веб-серверов - если вы запрашиваете domain.com/folder/, он проверяет index.html, index.php или тому подобное. 1003 *

В случае сайтов, подобных SO, сопоставление отличается. Веб-сервер настроен так, чтобы принимать запрос типа /questions/4339829/why-some-urls-of-websites-doesnt-show-the-php-extention-just-shows-words-like и отправлять этот запрос программе, которая знает, что с ним делать. Например, это может быть что-то вроде /scripts/displayquestion.php?question_id=4339828 или любая другая программа, написанная для обработки запросов. Это может быть сценарий PHP, сервер приложений или другой сценарий, написанный на другом языке.

0 голосов
/ 03 декабря 2010

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

Например: http://example.com/blog/my-first-post и http://example.com/blog/my-second-post могут быть переписаны в /index.php. Затем этот индексный скрипт может проанализировать запрос, чтобы определить, запрашивается ли запись в блоге, а также какая конкретная запись.

0 голосов
/ 03 декабря 2010

На всякий случай, переполнение стека построено на ASP.NET.

Ключевое слово, которое вы ищете, это «URL без расширений». Реализация зависит от того, какой сервер вы используете.

Для Apache и PHP см. Этот ответ: .htaccess: без www на www + URL без расширений + без индекса

0 голосов
/ 03 декабря 2010

если вы поместите domain.com/post/, он будет искать index.php или index.html, например. Если он не может найти один из них, он выдаст ошибку. Это на самом деле не связано с PHP:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...