Mod_rewrite и проблема с двойной косой чертой

Я применил следующее правило 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?

Ответ 1

Исправлено:

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

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

Ответ 2

RewriteRule ^\/?(.*)$ http://www.mydomain.com/$1 [R=301,L]

Ответ 3

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

RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]

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

Ответ 4

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

RewriteRule ^/(.*)$ http://www.example.com/$1 [R=301,L]

Ответ 5

Это потому, что корневой путь /, и вы добавляете все, что попадаете в 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]