.htaccess переназначение перенаправления на другой поддомен

Я пытаюсь сделать свое приложение AngularJS доступным для обнаружения в социальных сетях, и я наткнулся на следующую страницу github:

https: //github.com/michaelbromley/angular-social-demo

Однако я застрял на этапе .htaccess . Следующий код используется для перенаправления (с использованием переназначения) ботов facebook / twitter / google на другой URL (в том же домене):

<ifModule mod_rewrite.c>
 RewriteEngine On

# allow social media crawlers to work by redirecting them to a server-rendered static version on the page
RewriteCond %{HTTP_USER_AGENT} (facebookexternalhit/[0-9]|Twitterbot|Pinterest|Google.*snippet)
RewriteRule album/(\d*)$ http://www.michaelbromley.co.uk/experiments/angular-social-demo/server/static-page.php?id=$1 [P]

</ifModule>

То, что я пытаюсь сделать, очень похоже на то, что он сделал, однако, мой API - это поддомен.

Is . htaccess переназначение перенаправления возможно при использовании другого поддомена?

Пример:

http://www.example.com/test/123 переназначить на http: //api.example .com / title / test / 123 и сохраните URL-адрес браузера как http://www.example.com/test/123 .

1
задан 15 April 2017 в 00:41
1 ответ

Если вам просто нужно http://www.example.com/test/123 переназначить на http://api.example.com/title/test/123 без перенаправления в целом, т.е. без необходимости специального условия HTTP_USER_AGENT :

Контент на внешнем сервере

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

Хотя в вашем примере используется флаг [P] вызывает обработку запроса через прокси-запрос mod_proxy , это не рекомендуется:

Предупреждение производительности

Использование этого флага запускает использование mod_proxy, без обработки постоянные связи. Это означает, что производительность вашего прокси будет будет лучше, если вы настроите его с помощью ProxyPass или ProxyPassMatch . Это потому что этот флаг запускает использование рабочего по умолчанию, который делает не обрабатывать пул соединений. Избегайте использования этого флага и предпочитайте те

Директива ProxyPass , которая сопоставляет удаленные серверы с пространством URL-адресов локального сервера , доступна только в контексте конфигурации сервера , виртуальный хост и каталог , но недоступен в .htaccess контексте .

Если у вас нет доступа в конфигурацию сервера, вы можете сделать это только с помощью RewriteRule , поскольку это разрешено в контексте .htaccess . Это точно так же, как в примере вашего вопроса.

Если вы можете получить доступ к конфигурации (или запросить изменение), вы можете добавить туда:

<Location "/test/">
    ProxyPass "http://api.example.com/title/test/"
</Location>

Контент на том же сервере

Если контент физически находится на том же сервере, но на другом , самый простой способ - вообще не использовать mod_rewrite или mod_proxy , но mod_alias . Директива Псевдоним позволяет хранить документы в локальной файловой системе, кроме DocumentRoot .

Alias "/test" "/path/to/api/title/test"

Если вам нужно переназначить только в случае специальных пользовательских агентов

В этом случае с приложением AngularJS кажется, что вы хотите переназначить URL-адрес только при его посещении поисковыми роботами социальных сетей. В этом случае вам действительно нужно использовать RewriteCond , а со следующими RewriteRule вы можете использовать условие из вашего вопроса.

Сначала убедитесь, что у вас есть mod_rewrite установлен , иначе вы вообще не сможете использовать RewriteCond и RewriteRule .

Если контент находится на внешнем сервере , и вы не можете избежать использования [P] :

RewriteRule ^test/(.*)$ http://api.example.com/title/test/$1 [P]

Если вы находитесь в контексте .htaccess , вы не должны совпадать с ^ test / (. *) $ , но текущий каталог:

RewriteRule (.*) http://api.example.com/title/test/$1 [P]

Если содержимое находится на другом пути на том же сервере , вы можете использовать путь файловой системы для подстановки, но это невозможно сделать в ] .htaccess :

Подстановки рассматриваются как путь к файловой системе, только если правило настроен в контексте сервера (виртуального хоста) и первый компонент путь в подстановке существует в файловой системе.

RewriteRule ^test/(.*)$ /path/to/api/title/test/$1

Я не использовал \ d * из вашего примера: метасимвол \ d ограничивает только совпадение для цифровых символов.

1
ответ дан 3 December 2019 в 23:31

Теги

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