2016-05-14 2 views
1

Что-то, что действительно смущая меня, как сайты имеют сайты, например:Динамически создать URL-адресов

-и-

Первоначально , Я думал, ты можешь просто просто создайте php-файл и используйте URL-переписать в .htaccess. Например:

Ясно, что это не так, поскольку она не только не эффективен для более слеш, но CMS, таких как Wordpress, автоматически генерировать контент для «динамического» URL, и затем перенаправить на 301 страницы, если URL не распознается.

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

Если кто-то может объяснить, что называется этой системой, и как я могу это сделать. Я бы предпочел не получать код с ложкой, мне просто нужно, чтобы кто-то все это объяснил мне.

EDIT: После некоторых дальнейших исследований я нашел прекрасный пример, чтобы сделать мой вопрос более ясным. Обратите внимание на этот адрес:

имеет тот же URL, как:

Но показывает различное содержание, это совершенно новая страница, которая является «динамически» создано.

Затем несколько случайных ссылок из того же сайта:

Спасибо, Sutton

+0

http://stackoverflow.com/a/18499460/4621324 – Axalix

ответ

0

Если кто-то может объяснить, что эта система называется

Это называется RewriteEngine и это часть апачаmod_rewrite, другие веб-серверы имеют различные моды, но это самый популярный.

RewriteEngine on 
RewriteRule ^shop/$ shop.php [L] 
RewriteRule ^shop/products/(.*?)/$ products.php?type=$1 [L] 

первой пример будет отображать содержимое shop.php, когда пользователь получает доступ к www.site.com/shop/

второй пример будет посылать games, в качестве аргумента ($1), чтобы products.php?type=$1, если доступ пользователей www.site.com/shop/products/games/


[L] - называется флагом (L|last):

Флаг [L] вызывает mod_rewrite для обработки стоп набора правил. В в большинстве контекстов это означает, что если правило будет соответствовать, никакие дополнительные правила не будут обработаны. Это соответствует последней команде в Perl или команде break в C. Используйте этот флаг, чтобы указать, что текущее правило должно быть применено немедленно, без учета дальнейших правил.


^ является относительно веб корня (somesite.com/^)
$ представляет собой конец строки (somesite.com/^somedir/test/$ this part will not be processed)


Ресурсы:

Узнайте больше о mod_rewrite и rewrite Flags

+0

Прошу прокомментировать DV, я тоже здесь, чтобы узнать;) –

+1

Я уже исправил это, спасибо, что дал мне знать! –

+0

Другими словами, вы предлагаете редактировать .htaccess для каждого нового пути/страницы? – BillK

3

Так, конечно, если вы должны были использовать рамки как Laravel, его очень простой способ маршрутизации.

В каждом проекте есть файл "routes.php", который определяет вызовы на URL-адрес и отвечает с помощью метода контроллеров. Это, как правило, возвращает представление. Это делает его легко создать что-то вроде этого, как добавить строку, как этот

Route::get('home', '[email protected]'); 

в файл маршрутов и когда вы идете в example.com/home будет срабатывать контроллер под названием «PagesController» и запустить его домашний метод. В рамках этого метода вы можете вернуть представление, которое будет отображаемой страницей.

Это может быть расширено другими способами. У вас может быть другой маршрут, который почти такой же, но есть другой способ, когда кто-то отправляет данные сообщения одному контроллеру.

Route::post('home', '[email protected]'); 

Так что теперь у вас есть еще один маршрут, который займет пост вход на эту страницу и огонь совершенно другой метод из того же контроллера. Эти виды контроля + многие другие могут позволить вам достичь того, чего вы хотите очень легко и являются частью основных принципов laravel.

Это Routing page на странице laravel, которая может подсказать вам больше.

1

Существует много фреймворков, которые используют термин переписывание URL, но, очевидно, не ссылаются на .htaccess. Часто это называется маршрутизацией. WordPress делает это, используя пули страниц.

В WordPress .htacces отправляет запросы на существующие файлы и каталоги напрямую, минуя WP. Все, что не соответствует, как описано выше, должно быть «виртуальной» страницей. и отправляется index.php

URI затем анализируется так или иначе, как правило, с использованием регулярных выражений. Каждая часть пути URI коррелирует с «slug», затем они используются для создания запроса базы данных для создания соответствующего контента.

С точки зрения выбора конкретных шаблонов для определенных типов слизов существует гораздо больше.

1

Низкотехнологичный подход для достижения одного и того же результата без необходимости маршрутизации - это создать папку с нужным именем и иметь индекс index.php (или index.html) внутри него. Затем, когда URL-адрес вызывается - по умолчанию открывается файл индекса в папке, даже если он не указан в URL-адресе.

поэтому

http://example.com/shop.php/product-category.php/games/ 

будет эквивалентно вызову

http://example.com/shop.php/product-category.php/games/index.php 

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

Смежные вопросы