использование .htaccess для маскировки подкаталога как root с сегментами - PullRequest
6 голосов
/ 04 апреля 2019

Я хочу переместить мое приложение в корень моего сервера. У меня проблемы с маскировкой подкаталога с сегментами.

Текущие URL: mysite.com/client/kelloggs/sketches/image1.png

Текущий доступ: RewriteRule ^client/([^/]+)/([^/]+)/([^/]+) /client_view/_show_mocks.php?client_name=$1&milestone=$2&image=$3 [NC]

Как я могу удалить client/ и вместо этого иметь такой URL? mysite.com/kelloggs/sketches/image1.png

Надеясь на: mysite.com/kelloggs/sketches/image1.png

1 Ответ

1 голос
/ 04 апреля 2019

Для того чтобы ваш http-сервер отвечал на шаблон URL, вы предполагаете, что вам просто нужно внести незначительные изменения в ваше текущее правило.Наиболее важным является удаление префикса client/ из соответствующего шаблона, как @AleksG предложил в своем предыдущем комментарии.Я сделал несколько небольших дополнительных изменений, чтобы сделать правило более надежным.

Часто имеет смысл позаботиться и об обратном направлении, поэтому для перенаправления клиентов все еще используется «старый» шаблон URL, поэтому я добавил также:

RewriteEngine on

RewriteCond %{QUERY_STRING} (?:^|&)client_name=([^&]+)&milestone=([^&]+)&image=([^&]+)(&|$)
RewriteRule ^/?client_view/_show_mocks\.php$ /%1/%2/%3 [R=301]

RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^/?([^/]+)/([^/]+)/([^/]+)$ /client_view/_show_mocks.php?client_name=$1&milestone=$2&image=$3 [END]

ЭтоХорошая идея - начать с временного перенаправления 302 и изменить его только на постоянное перенаправление 301 позже, как только вы убедитесь, что все настроено правильно.Это предотвращает проблемы с кэшированием при испытаниях ...

В случае, если вы получаете внутреннюю ошибку сервера (http status 500), используя приведенное выше правило, есть вероятность, что вы используете очень старую версию http-сервера apache.В этом случае вы увидите определенный намек на неподдерживаемый флаг [END] в файле журнала ошибок http-серверов.Вы можете попытаться обновить или использовать более старый флаг [L], он, вероятно, будет работать так же в этой ситуации, хотя это немного зависит от ваших настроек.

Это правило также будет работать в конфигурации хоста http-серверов или внутри файла динамической конфигурации (файл ".htaccess").Очевидно, что модуль перезаписи должен быть загружен внутри http-сервера и включен на хосте http.Если вы используете динамический файл конфигурации, вам нужно позаботиться о том, чтобы его интерпретация вообще была включена в конфигурации хоста и находилась в папке DOCUMENT_ROOT хоста.

И общее замечание: вы всегда должны предпочитать размещать такие правила в конфигурации хоста http-серверов вместо использования файлов динамической конфигурации (".htaccess").Эти динамические конфигурационные файлы добавляют сложность, часто являются причиной неожиданного поведения, их трудно отладить, и они действительно замедляют работу http-сервера.Они предоставляются только в качестве последнего варианта для ситуаций, когда у вас нет доступа к реальной конфигурации хоста http-серверов (читай: действительно дешевые поставщики услуг) или для приложений, настаивающих на написании своих собственных правил (что является очевидным кошмаром безопасности).

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