2010-07-10 3 views
0

Эй, ребята! Можете ли вы посоветовать мне, как изменить мой .htaccess, так чтоКак перенаправить навсегда (301) через .htaccess?

http://example.com (non-www without trailing slash) 
http://example.com/ (non-www with trailing slash) 
http://www.example.com (www without trailing slash) 

будет постоянно перенаправлены (301) в

http://www.example.com/ (www with trailing slash)?

Кроме того, существуют общие правила для применения этого "поведение" в подпапок

http://example.com/subfolder 
http://example.com/subfolder/ 
http://www.example.com/subfolder 
=> http://www.example.com/subfolder/ 

и поддоменов (здесь) в противоположном направлении

http://www.subdomain.example.com 
http://www.subdomain.example.com/ 
http://subdomain.example.com 
=> http://subdomain.example.com/ 

, а? Поскольку я совершенно новичок в этом, пожалуйста, будьте добры ... =)

Спасибо! Nel

+0

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html –

+0

Благодаря Игнасио! Я уже давал доктору попробовать, но должен признать, что большая часть этого просто проходит по моей голове ... =) Я ищу решение «одно-подходит для всех», которое делает его еще сложнее ... действительно нужно ВАС, профи! – Nelly

+0

Ничего, я неправильно понял ваш вопрос. Вы не хотите перенаправления, вы хотите переписать, как обсуждали другие ответы. Удалил мой ошибочный ответ. –

ответ

1

Эти три правила должны делать все, что вы хотите:

RewriteEngine On 

# Rewrite www.subdomain.example.com to subdomain.example.com 
RewriteCond %{HTTP_HOST} ^www\.(.*)\.example\.com 
RewriteRule (.*) http://%1.example.com/$1 [L,R=301] 

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

# Add trailing slash to all URIs without one 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ $1/ [L,R=301] 
+0

Эй, ты! =) Я думаю, это то, что я ищу - спасибо! Должен ли я добавить «RewriteEngine On» и «RewriteBase /» здесь, как цитировал Эрик? – Nelly

+0

Только RewriteEngine On, я верю. (Я также отредактирую свой ответ) – You

+0

Еще раз спасибо, я попробую это как можно скорее. – Nelly

0

Я думаю, что это будет делать трюк:

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ $1/ [L,R=301] 
2

директива DirectorySlashes заботится о проблеме задней косой черты.

Не-WWW для WWW Перенаправление:

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