Назад | Перейти на главную страницу

Перенаправление переназначения .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 - это поддомен.

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

Пример:

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

Если тебе просто нужно 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 контекст. Это точно так же, как в примере вашего вопроса.

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

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

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

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

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

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

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

Первый убедитесь, что у вас есть 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 ограничивает совпадение только цифровыми символами.