htaccess перенаправляет ссылки с нескольких поддоменов - PullRequest
1 голос
/ 03 февраля 2020

Вот моя дилемма:

У меня много ссылок с нескольких поддоменов

https://dev.example.com/abc.html

https://xyz.example.com/abc.html

как я могу перенаправить они используют htaccess

Redirect 301 https://dev.example.com/abc.html https://xyz.example.com/abc , очевидно, не работает sine, он может работать только с /abc.

И, как я уже говорил, у меня там много ссылок и по какой-то причине я хотел бы иметь его в htaccess

Обратите внимание, что ab c является допустимой страницей, которая существует на целевом URL, поэтому она вызовет бесконечно l oop, если я использую /abc, потому что он будет пренебрегать поддоменом.

Проблема не в том, чтобы перенаправить с субдомена на другой, это не так, дело в том, что у меня есть ссылки, которые я бы хотел перенаправить с субдомена на другой, а именно c ссылки.

Поэтому я не ищу что-то вроде не www to www kind синтаксиса.

Я не ищу что-то вроде этого:

RewriteEngine on
RewriteBase /
rewritecond %{http_host} ^example.com [nc]
rewriterule ^(.*)$ http://www.example.com/$1 [r=301,nc]

Если это можно сделать с помощью чего-то вроде группировки всех ссылок в определенном поддомене dev.example.com, тогда все ссылки, перечисленные под ним, сопровождаются целевым URL.

Это можно сделать с помощью php, но я предпочитаю, чтобы оно было в htaccess.

Самое близкое решение, которое, я считаю, могло бы сработать, это иметь те ссылки разбросаны внутри apache vhosts

<VirtualHost *>
  ServerName dev.example.com
  Redirect 301 / http://example.com/
  # Have the rest of links here
</VirtualHost>

Тогда

<VirtualHost *>
  ServerName xyz.example.com
  Redirect 301 / http://example.com/
  # have the rest of the links here
</VirtualHost>

Действителен?

Обновление

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^tags\/xyz\.html\ $ "https\:\/\/dev\.example\.com\/" [R=301,L]
RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^abcd$ "https\:\/\/dev\.example\.com\/" [R=301,L]

Вот что я получил в htaccess, когда я создаю перенаправление с cpanel. поэтому он проверяет, к какому решению я пришел.

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

1 Ответ

1 голос
/ 03 февраля 2020
Секция

VirtualHost разрешена только в Apache config или vhost config файлах и требует прав sudo или root для редактирования этих файлов.

При отсутствии этих привилегий всегда удобнее иметь отдельный каталог для каждого субдомена, который допускает отдельный .htaccess для каждого субдомена. Это позволит вам сохранить все правила для субдомена в одном .htaccess. Это устраняет необходимость иметь условие типа RewriteCond %{HTTP_HOST} перед каждым правилом.


Для одного .htaccess вы можете использовать этот альтернативный подход, где источник всегда example.com и цель такое поддомен:

RewriteEngine On

# all other rules except redirect links to subdomains go here

# if current domain is not example.com then ignore all the rules below
RewriteCond %{HTTP_HOST} !^(?:www\.)?example\.com$ [NC]
RewriteRule ^ - [L]

# all the redirects to subdomains go below

RewriteRule ^some-faq-item/?$ to https://faq.example.com/some-faq-item [L,NC,R=301]

RewriteRule ^from1/?$ to https://faq.example.com/to1 [L,NC,R=301]

RewriteRule ^abcd/?$ to https://dev.example.com/ [L,NC,R=301]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...