Сделать так, чтобы apache автоматически удалял www.?

По разным причинам, таким как файлы cookie, SEO и для простоты, я хотел бы, чтобы apache автоматически перенаправлял любые запросы на http://www.foobar.com/anything на http://foobar.com/anything. Лучшее, что я мог придумать, это чудовище на основе mod_rewrite, есть ли какой-нибудь простой способ сказать ему «Перенаправить все запросы для домена ABC на XYZ»?

PS: я нашел этот несколько связанный вопрос, но он для IIS и выполняет противоположное тому, что я хочу. Кроме того, это все еще сложно.


person davr    schedule 17.09.2008    source источник


Ответы (6)


Это так же просто, как:

<VirtualHost 10.0.0.1:80>
        ServerName www.example.com
        Redirect permanent / http://example.com/
</VirtualHost>

Адаптируйте имена хостов и IP-адреса по мере необходимости :)

person TobiX    schedule 17.09.2008

проще и удобнее копировать с сайта на сайт:

RewriteCond %{HTTP_HOST} ^www\.(.+)$
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
person Community    schedule 30.03.2009
comment
Это решение НАМНОГО лучше, чем остальные здесь. - person Kendall Hopkins; 12.08.2010
comment
Одна важная вещь, которую следует отметить в отношении этого решения, заключается в том, что оно всегда будет перенаправляться на HTTP. Лучшим решением может быть pastebin.com/TjD6iha2. - person Kendall Hopkins; 12.08.2010

Довольно просто, если вы используете mod_rewrite, как и все мы ;)

Это часть .htaccess с моего живого сайта:

RewriteEngine on

# Catches www.infinite-labs.net and redirects to the
# same page on infinite-labs.net to normalize things.

RewriteCond %{HTTP_HOST} ^www\.infinite-labs\.net$
RewriteRule ^(.*)$ http://infinite-labs.net/$1 [R=301,L]
person millenomi    schedule 17.09.2008

Используйте файл .htaccess с некоторыми правилами mod_rewrite:

RewriteEngine On
RewriteRule ^www.SERVERNAME(.*) http://SERVERNAME$1 [L,QSA]

Я не уверен, что правильно понял синтаксис с $1, но он хорошо задокументирован. L отправляет заголовок location: в браузер, а QSA означает Query String Append.

person Michael    schedule 17.09.2008

Поскольку вы упомянули об использовании mod_rewrite, я бы предложил простое правило в вашем .htaccess - мне это не кажется чудовищным :)

RewriteCond %{HTTP_HOST} ^www\.foobar\.com$ [NC]
RewriteRule ^(.*)$ http://foobar.com/$1 [L,R=301]
person sirprize    schedule 17.09.2008

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

Это должно делать свое дело.

person UnkwnTech    schedule 17.09.2008
comment
Внимание к ^www.domain.com$: точки соответствуют всему, поэтому их следует экранировать. Смотрите мой ответ. - person millenomi; 18.09.2008
comment
Это то, что я использую на нескольких веб-сайтах в обязательном порядке. - person UnkwnTech; 18.09.2008
comment
Да, он будет работать и без неэкранированных точек, потому что точки тоже совпадают с точкой. Есть не так много способов, чтобы это могло пойти не так. Но лучше избегать точек, потому что так вы говорите то, что имеете в виду. - person Peter Stuifzand; 18.09.2008