Перезапись подкаталога в другой подкаталог - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь получить URL http://example.com/api/dev/v1/warehouse/ для перезаписи на: http://example.com/api/v1/warehouse/

Каталог 'dev' в первом URL не существует. Второй URL существует.

По сути, когда посетитель переходит на первый URL-адрес, он должен переписать (а не перенаправить) второй. Следует также переписать все подкаталоги.

Я пробовал следующее:

  RewriteEngine on
  RewriteRule ^/?api/dev/v1/(.*)$ /api/v1/$1 [L]


  RewriteEngine on
  RewriteRule ^/api/v1/(.*)$ /api/dev/v1/$1 [L]


  RewriteEngine on
  RewriteRule ^/?api/dev/v1/(.*)$ /api/v1/$1 [L]


  RewriteEngine on
  RewriteRule !^api/dev/v1(/|$) api/v1%{REQUEST_URI} [L]

, но все они дали 404 ....

Чтобы добавить, файл .htaccess находится в корне, с ничего другого в файле htaccess.

1 Ответ

1 голос
/ 17 октября 2019

Это выглядит довольно просто, на самом деле:

RewriteEngine on
RewriteRule ^/?api/dev/v1/(.*)$ /api/v1/$1 [END]

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

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

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

Чтобы это работало, модуль перезаписи должен быть загружен на http-сервер, очевидно. Кроме того, если вы решите использовать файл динамической конфигурации (файл стиля ".htaccess"), несмотря на то, что я объяснил выше, вам необходимо включить интерпретацию такого файла для запрошенного местоположения (см. AllowOverride в документации apache). Файл необходимо поместить в папку DOCUMENT_ROOT хоста http, отвечающего на запрос, и он должен быть доступен для чтения процессу http-сервера. И, конечно, он должен иметь правильный синтаксис. Если все, что дано, и все еще не работает, то вам определенно стоит заглянуть в файл журнала ошибок вашего http-сервера. Вот где двигатель будет регистрировать все проблемы, с которыми он сталкивается. В любом случае вам нужно следить за этим файлом при работе над реализациями в веб-среде.

...