.htaccess переписывает www на проблемы с перенаправлением без www

Итак, я пытаюсь заставить этот код перенаправления работать уже несколько часов, и это сводит меня с ума. У меня есть противоположное направление (без www на www), работающее с этим кодом:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*) http://www.%{HTTP_HOST} [R=301]

Я нашел приведенный выше код здесь: https://stackoverflow.com/questions/3013730/redirecting-non-www-to-www

Мне пришлось удалить $1 из третьей строки кода, чтобы заставить его работать:

RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301]

Мне нужно, чтобы www.example.com перенаправлял на example.com

и для каждой страницы на www.example.com перенаправлять на один и тот же URL, за исключением www.

www.example.com/test ---> example.com/test

www.example.com/begin.php ---> example.com/begin.php

Так далее и тому подобное. Поскольку у меня самый верхний раздел кода работал в противоположном направлении, я подумал, что было бы легко просто переключить пару вещей и заставить их работать через несколько минут, но я всегда заканчивал тем, что сталкивался с 404, бесконечными циклами и тому подобным. есть ты. Основная проблема в том, что я не до конца понимаю эту часть кода:

^[^.]+\.[^.]+$

Любая помощь для зеленого апача? Бесконечно благодарен!

---ИЗМЕНИТЬ---

Я нашел код, который ближе к тому, что мне нужно, но у него есть свои проблемы. Код:

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

В этом коде есть две проблемы:

1) Когда я набираю example.com/test, он сначала проходит через www.example.com/test, чего я хотел бы избежать, если это вообще возможно.

2) Когда я ввожу example.com/test, он заканчивается на example.com/test.php, и я хотел бы избежать файла с < strong>.php в качестве конечного пункта назначения. Какие-либо предложения?


person Richard Coleman    schedule 14.12.2012    source источник


Ответы (1)


Попробуй это:

#www to non-www
RewriteEngine On
#Important to place
RewriteBase /
RewriteCond %{HTTP_HOST} www\.example\.com$ [NC]
RewriteRule ^(.*)/?$ http://example.com/$1 [L,R=301]
person Felipe Alameda A    schedule 14.12.2012
comment
Благодарю за ваш ответ! Как написано, это дает мне бесконечный цикл, например, example.com/example/example/example/example (и так далее, и так далее). Я нашел другой код, который в основном делает то, что я хочу, но он все еще вызывает у меня некоторые проблемы (см. редактирование выше). - person Richard Coleman; 14.12.2012
comment
@RichardColeman Я обновил свой ответ, чтобы предотвратить любую возможность зацикливания. - person Felipe Alameda A; 14.12.2012
comment
В очередной раз благодарим за помощь. Новый код просто 404, когда я пробую www.example.com. Я начинаю думать, что это мой веб-хост (1 и 1) вызывает проблемы, поскольку почти у всех остальных нет такой же проблемы, как у меня. - person Richard Coleman; 14.12.2012
comment
@Richard Попробуйте код за пределами вашего сайта, здесь. Это поможет вам узнать, что происходит. - person Felipe Alameda A; 14.12.2012
comment
Хм, да, тестер htaccess показывает, что он должен работать так, как я хочу... Должно быть, это мой хост. Я напишу им, посмотрим, поймут ли они, о чем я говорю. Еще раз спасибо! - person Richard Coleman; 14.12.2012