mod_rewrite и двойная косая черта - PullRequest
17 голосов
/ 24 ноября 2010

Я применил следующее правило mod_rewrite в Apache2 для перенаправления с не www на www:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

У меня есть два вопроса:

1) Проблема с двойной косой чертой:

Любые советы, как это исправить?

2) Хороша ли моя конфигурация для SEO?

Ответы [ 5 ]

33 голосов
/ 25 ноября 2010

Исправлено с помощью:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://www.mydomain.com$1 [R=301,L]

, поскольку $1 по умолчанию содержит путь индекса /

19 голосов
/ 25 ноября 2010
RewriteRule ^\/?(.*)$ http://www.mydomain.com/$1 [R=301,L]
6 голосов
/ 24 ноября 2010

На самом деле, у вас всегда будет двойная косая черта из-за

RewriteRule ^(.*)$ <a href="http://www.mydomain.com/" rel="noreferrer">http://www.mydomain.com/</a>$1 [R=301,L]

в сочетании с тем фактом, что REQUEST_URI (с которым вы подходите) обычно содержит начальный слеш Вы можете попробовать RewriteRule ^(.*)$ <a href="http://mydomain.com" rel="noreferrer">http://mydomain.com</a>$1, а затем отправить неверный HTTP-запрос GET foo HTTP/1.0 и посмотреть, правильно ли с ним работает Apache.

2 голосов
/ 26 ноября 2014

Вставка косой черты в ваш шаблон должна решить эту проблему:

RewriteRule ^/(.*)$ http://www.example.com/$1 [R=301,L]
1 голос
/ 24 ноября 2010

Это потому, что корневой путь равен /, и вы добавляете все, что получаете в RewriteRule (первый случай работает нормально, потому что не соответствует условию, поэтому перезапись не выполняется ).

Вы можете попробовать что-то вроде этого:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^mydomain\.com$ [NC]
# for the home page
RewriteRule ^/$ http://www.mydomain.com/ [R=301,L]
# for the rest of pages
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]
...