У меня проблема с перенаправлением поддомена с подстановочными знаками и использованием внутреннего сокращателя URL-адресов.
Допустим, у меня есть внутренний сокращатель URL-адресов в моем приложении
example.com/b/ABCDE
, который переводит
example.com/book/12345678-the-book-name
скрипт, на который ссылается /b/
(я использую структуру PHP, которая может обрабатывать правило URL), будет переводить короткие ID ABCDE
на реальный ID книги 12345678
(и название «Название книги»), затем перенаправьте его на постоянный URL-адрес книги example.com/book/12345678-the- имя книги
, поэтому каждый раз, когда я размещаю ссылку о книге на веб-сайтах, таких как доски объявлений, сайты микроблогов или физические носители, такие как плакаты или визитные карточки, я использую короткую ссылку (example.com /b/ABCDE
) вместо постоянной ссылки ( example.com/book/12345678-the-book-name
).
Затем мне нужно перенаправить все поддомены с подстановочными знаками на основной домен ( www.example.com
) при сохранении URI запроса, например.
http://random.example.com/book/11111111-some-book -> http://www.example.com/book/11111111-some-book
http://123456.example.com/book/22222222-another-book -> http://www.example.com/book/22222222-another-book
http://abcdefg.example.com/book/33333333-another-book-again -> http://www.example.com/book/33333333-another-book-again
добавив правило ниже после всех правил, которые я использовал
ServerName example.com
ServerAlias *.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.example.com [NC]
RewriteRule ^/(.*)$ http://www.example.com/$1 [R=301]
Следовательно, URL-адрес с доменом example.com и без префикса, как показано ниже
http://example.com/book/11111111-some-book
, будет преобразован в
http://www.example.com/book/11111111-some-book
И еще одно последствие заключается в том, что если внутренний сокращатель URL используйте обычный домен без префикса, для разрешения потребуется два перенаправления.Например,
http://example.com/b/ABCDE
сначала будет перенаправлено на
http://www.example.com/b/ABCDE
, а затем на
http://www.example.com/book/12345678-the-book-name
. На самом деле, я не возражаю против двукратного перенаправления. Но мой консультант по SEO сказал, что двукратное перенаправление плохо влияет на SEO моего сайта. (что я до сих пор не знаю, почему)
Итак, я попытался изменить последнее правило на следующее
ServerName example.com
ServerAlias *.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteCond %{REQUEST_URI} ^/b/(.*)$
RewriteRule . index.php [L]
RewriteCond %{HTTP_HOST} !^www.example.com [NC]
RewriteRule ^/(.*)$ http://www.example.com/$1 [R=301]
Я не очень хорош в настройке Apache, но когда я имитировал указанное выше правило в http://htaccess .madewithlove.be/, это работает. Но когда я применил его к своему серверу, он выдал мне 400 Bad Requestдля example.com/p/ABCDE
.
Итак, мои вопросы:
example.com/b/ABCDE
без префикса www
), но все же в одном перенаправлении.