Apache - динамические подпапки

chroot является операцией, он изменяет очевидный корневой каталог для текущего рабочего процесса, и это - дети.

корень является учетной записью, которая по умолчанию имеет доступ ко всем командам и файлам на Linux (Базирующийся Unix) система.

корневой каталог является самым высоким каталогом в иерархии.

1
17.08.2016, 14:32
3 ответа

Это назвало перезапись URL. Можно сделать это в Apache с RewriteEngine, или непосредственно в конфигурации Apache, или с .htaccess (нет действительно никакого различия). И можно сделать это на многих других веб-серверах (мне нравится nginx за его производительность и его простоту конфигурации).

То, когда Вы переписываете URL, Вы отводите динамические роли URL (в Вашем примере, независимо от того, что, после / и прежде чем вторым / является одна из динамических частей), к переменной, передало некоторому серверному языку (мог быть PHP, JSP, не имеет значения). Затем на серверном языке, это - постоянный клиент, ПОЛУЧАЮТ параметр, который можно обработать - считывает соответствующие данные с Базы данных, и так далее.

Например, Вы переписываете:

^(.*)/(.*)$ /controller.php?user=$1&page=$2

Затем в PHP, коде:

echo $_GET['user'];

Распечатал бы:

PewDiePie
3
27.01.2020, 23:17

Это не действительно физические каталоги в системе. Они - динамические имена в пространстве имен URL, которое отображается или на физическом каталоге или интерпретируется как аргумент функции или приложению, которое затем действует на него.

Это обычно - перезапись URL, это упрощает это "волшебство". Смотрите на это учебное руководство от smashingmagazine, если Вы действительно любопытны, названы: Введение В Перезапись URL.

Пример

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

http://en.wikipedia.org/w/index.php?title=Barack_obama

Но когда Вы на сайте, Вы, вероятно, будете видеть страницу как это:

http://en.wikipedia.org/wiki/Barack_obama

Конфигурация Apache, которая заставляет это произойти:

RewriteEngine On
#Look for the word "wiki" followed by a slash, and then the article title
RewriteRule   ^wiki/(.+)$   w/index.php?title=$1   [L]

Это берет URL, что браузер получает доступ к "http://en.wikipedia.org/wiki/Barack_obama" и переписывает его внутренний к веб-серверу (Apache) к этому, "http://en.wikipedia.org/w/index.php?title=Barack_obama".

Я часто думаю об этом как подобном на Звездном пути, где у них был универсальный переводчик. Сервер берет один набор URL на входе (от браузера), и на задней стороне переводит те URL в другие, которые отображаются на реальные приложения и сценарии на сервере или даже других серверах.

1
27.01.2020, 23:17
  • 1
    Отметьте использование a RewriteRule без обратного проксирования также перепишет URL в адресной панели также. Следовательно предложение AliasMatch таким образом, это ведет себя как примеры, данные OP :) –  Drav Sloan 22.08.2013, 02:49
  • 2
    @DravSloan - благодарит добавить, что, я просто давал им основы, у меня есть чувство, так как они не знали об этой функции/средстве веб-обслуживания, этого AliasMatch и вся остальная часть функций пробежится через их голову. –  slm♦ 22.08.2013, 02:53

Просто перенаправить все URL, которые не имеют a / в них Вы могли достигнуть с простым AliasMatch (от mod_alias):

AliasMatch ^/([^/]+) /path/to/handler.php

Вы могли затем посмотреть на REQUEST_URI переменная среды в Вашем сценарии для обработки пользователя для отображения.

И затем для дополнительного материала как /about обработка:

AliasMatch ^/([^/]+)/(about|videos|blah) /path/to/handler.php

или Вы могли заставить это соответствовать всего двум уровням (таким образом, соединяет каналом как /x/y/z не будет обработан), таким же образом, мы соответствовали подсистеме пользователей выше ([^/]+ один или несколько символов, которые не являются наклонной чертой):

AliasMatch ^/([^/]+)/([^/]+) /path/to/handler.php

И снова используйте REQUEST_URI разрабатывать, что отобразиться.

Это будет служить странице URL "как есть" (таким образом, URL останется таким же на Вашей адресной панели в Вашем браузере), все же, содержание будет сгенерировано /path/to/handler.php.

Они были бы двумя отдельными правилами. Вероятно, был бы способ обработать просто a /username и /username/something в одном правиле, но затем это, скорее всего, закончило бы тем, что было довольно нечитабельно. Они сделаны этим способом постараться не соответствовать всему после domain.com.

Если необходимо измениться на путь к аргументам сценарию, то Вы в землю RewriteRule (от mod_rewrite). Если Вы хотите поддержать URL в адресной панели, необходимо будет сделать обратный запрос прокси:

 RewriteEngine On
 RewriteRule ^/([^/]+) /path/to/handler.php?user=$1 [LP]
 RewriteRule ^/([^/]+)/(about|videos|blah) /path/to/handler.php?user=$1&args=$2 [LP]

Это сохранило бы сценарий, имеющий необходимость обработать REQUEST_URI, и может вытянуть переменные от $_GET['user'] и $GET['args'] при использовании PHP.

Снова, как AliasMatch то второе правило могло быть:

 RewriteRule ^/([^/]+)/([^/]+) /path/to/handler.php?user=$1&args=$2 [LP]

но отметьте обоими из них, Ваш сценарий должен будет знать, как обработать все, что соответствует двум URL. Это не может быть тем, что Вы хотите для таких URL как:

 /errors/404.html
 /about/google.html

и так далее.

1
27.01.2020, 23:17
  • 1
    Обновленный мой ответ как AliasMatch не может сделать аргументов сценария, необходимо было бы использовать RewriteRule от mod_rewrite вместо этого. AliasMatch может использоваться, и сценарий должен будет обработать REQUEST_URI переменная среды вместо этого. –  Drav Sloan 22.08.2013, 12:15
  • 2
    Единственная проблема, которую я вижу с этим, - то, что я хотел бы иметь страницы в той странице, как youtube.com/user/PewDiePie/about –  rtainc 22.08.2013, 20:20

Теги

Похожие вопросы