Apache Rewrite — перенаправление субдоменов с подстановочными знаками и обработка внутреннего сокращателя URL-адресов

У меня проблема с перенаправлением поддомена с подстановочными знаками и использованием внутреннего сокращателя 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.

Итак, мои вопросы:

  1. Прав ли мой SEO-консультант в своем аргументе? Есть ли какое-то объяснение, которое может поддержать его, или есть контраргумент?
  2. Почему сервер выдал 400 Bad Request?
  3. Как исправить перенаправление? Я хочу сохранить короткий URL-адрес (example.com/b/ABCDEбез префикса www), но все же в одном перенаправлении.

5
задан Ibrahim Arief 13 June 2012 в 05:35
поделиться