Перенаправить на правильное имя домена в .htaccess - PullRequest
2 голосов
/ 14 марта 2011

Мне нравится HTML5 Boilerplate Пола Айриша.Я включил большую часть того, что находится в файле .htaccess, в мой.

Мне нравится, как он перенаправляет на версию домена без www, а также добавляет косую черту, когда она отсутствует:

# ----------------------------------------------------------------------
# Suppress or force the "www." at the beginning of URLs
# ----------------------------------------------------------------------
# The same content should never be available under two different URLs - especially not with and
# without "www." at the beginning, since this can cause SEO problems (duplicate content).
# That's why you should choose one of the alternatives and redirect the other one.
# By default option 1 (no "www.") is activated. Remember: Shorter URLs are sexier.
# no-www.org/faq.php?q=class_b
# ----------------------------------------------------------------------
# Option 1:
# Rewrite "www.domain.com -> domain.com" 
<IfModule mod_rewrite.c>
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
  RewriteCond %{HTTP_HOST} ^m\.(.+)$ [NC]
  RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</IfModule>
# ----------------------------------------------------------------------


# ----------------------------------------------------------------------
# Add/remove trailing slash to (non-file) URLs
# ----------------------------------------------------------------------

# Google treats URLs with and without trailing slashes separately.
# Forcing a trailing slash is usually preferred, but all that's really
# important is that one correctly redirects to the other.
# http://googlewebmastercentral.blogspot.com/2010/04/to-slash-or-not-to-slash.html
# http://www.alistapart.com/articles/slashforward/
# http://httpd.apache.org/docs/2.0/misc/rewriteguide.html#url Trailing Slash Problem
# ----------------------------------------------------------------------
# Rewrite "domain.com/foo -> domain.com/foo/"

<IfModule mod_rewrite.c>
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
  RewriteRule ^(.*)$ /$1/ [R=301,L]
</IfModule>
# ----------------------------------------------------------------------

Но что произойдет, если есть несколько припаркованных доменов (или псевдонимов)?Например, если основным доменом является www.domain.com, но припарковано следующее: www.domain.co.uk и www.domain2.com?Приведенный выше код не учитывает это и будет просто перенаправлять с www.domain.co.uk на domain.co.uk и с www.domain2.com на domain2.com.Я хочу, чтобы они все перенаправили на domain.com.В идеале я не хочу указывать правильное имя домена в файле .htaccess, потому что тогда мне придется изменять файл .htaccess каждого сайта отдельно.Возможно, это единственный способ, так как файл .htacess не сможет узнать правильное доменное имя - это правда?Я подумал о добавлении короткого фрагмента php вверху каждой страницы для перенаправления на правильное доменное имя (в любом случае короткий файл конфигурации добавляется к каждому html-файлу), но это, вероятно, не очень хорошая практика.

Любые идеи

Ответы [ 2 ]

4 голосов
/ 14 марта 2011

Домены псевдонимов IMO должны иметь свой собственный VirtualHost, который просто содержит оператор Redirect.В любом случае VirtualHosts должны содержать доменные имена, если только вы не используете VHosts на основе IP.

1 голос
/ 14 марта 2011

Если вы хотите, чтобы все домены перенаправляли на один и тот же домен, скажем domain.com, просто добавьте это к вашему .htaccess:

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