1. При редиректе сайта с WWW на безWWW c помощью .htacceess, столкнулся с такой проблемой при загрузке страницы www.example.com/page получается example.com/index.php?_route_=page я понимаю что правило RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA] не распространяется на путь который начинается с WWW. как это исправить? кусок содержимого .htacceess Код: RewriteEngine On RewriteBase / RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L] RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L] RewriteRule ^system/download/(.*) /index.php?route=error/not_found [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css) RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L] RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA] 2. Почему-то не пашет более правильный вариант на apache c httpd Код: NameVirtualHost *:80 <VirtualHost *:80> ServerName example.com DocumentRoot "/path/to/site" </VirtualHost> <VirtualHost *:80> ServerName www.example.com Redirect 301 / http://example.com/ </VirtualHost> при загрузке страницы www.example.com/page получается example.compage/ т.е. между именем сайта и страницей нет "/" Я предпочитаю пойти по пути №2. Кто сталкивался с подобной проблемой, подскажите как решить?
А такой вариант пробовали? Код: RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
да пробовал самым первым, только вместо + у меня * Код: RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L] не работает Повторюсь, не хотел бы делать это директивой rewrite, лучше вариант apache
Это всё Апач. .htacceess - это конфиг Апача. Если хотите совсем правильно, делайте редирект через nginx: Код: server { listen :80; listen [::]:80; server_name www.domain.com; return 301 http://domain.com$request_uri; }
Для этого нужно иметь доступ к конфигу nginx. Не каждий хостер дает доступ к конфигу. Многие работают в связке с апачем и позволяют настаривать сервер через htaccess.
Всё так, но если есть доступ к редактированию VirtualHost, вероятно. речь идёт о VPS/VDS. На шаредах и к VirtualHost прямого доступа нет.
Директива rewrite в 2 раза "тяжелее" redirect. потому не хочу решать через htaccess, да он и не работает. 1。У меня VPS。 2。Так и не увидел разумного ответа на вопрос Почему нельзя сделать правильно через httpd? Почему не работает вариант с httpd? NameVirtualHost *:80 <VirtualHost *:80> ServerName example.com DocumentRoot "/path/to/site" </VirtualHost> <VirtualHost *:80> ServerName www.example.com Redirect 301 / http://example.com/ </VirtualHost> почему при загрузке страницы www.example.com/page получается example.compage/ т.е. между именем сайта и страницей нет "/"
Это просто не нужно делать. Когда на сервер приходит запрос, его встречает nginx, а дальше уже перенаправляет на apache. Если запрос нужно перенаправить на другой домен (технически, www - это поддомен, а не просто указатель на web), нет смысла пропускать его на apache - это только лишняя нагрузка на сервер. Если зашла речь о том, что rewrite в 2 раза тяжелее redirect (кстати, можно ссылку на источник?), то любое перенаправление через apache будет глупостью, ибо можно обойтись вообще без apache, который жрёт значительно больше ресурсов, чем nginx, тем более, что nginx в любом случае уже задействован в обработке запроса! Уверен, если вы задумываетесь о таких мелочах, как производительность rewrite и redirect, у вас, конечно. наружу уже слушает nginx. В принципе, если так важна производительность, советую вообще отказаться от apache и использовать связку nginx + php-fpm. В отличии от apache, такая связка практически не потребляет памяти и работает молниеносно. Проверено многократно на собственном опыте, в том числе и с ОпенКартом (и все ЧПУ отлично работают).
что если послушать твой совет и пойти немного дальше, вот этим путем? --- Добавлено, 6 окт 2015 --- http://stackoverflow.com/questions/1100343/apache-redirect-from-non-www-to-www отсюда пошел искать и нашел несколько отличных объяснений то есть, по этой логике www нихрена не архаизм, как говорят многие, и лучше чтобы сайт был с www чем без www поскольку если будут другие поддомены у этого домена, то лучше чтобы перенаправление шло на www у apache, я верно понимаю это?
Это не дальше, а ближе. Я был уверен, что и так уже используется такая связка. Идеальный вариант это nginx + php-fpm, а nginx + apache - это минимально возможный вариант. Если есть хоть малейшая забота о потреблении ресурсов и скорости работы, apache никогда и ни при каких условиях не будет слушать наружу! А вообще, в большинстве случаев в apache совсем нет смысла. Без него нельзя было обойтись до появления php-fpm, но не сейчас. Нет. www - это домен третьего уровня (вместо www там может быть, например, zzz - никакой разницы). Всегда лучше, чтоб домен был как можно более высокого уровня.
нет еще. но я на верном пути))) как мне кажется zzz и www - это две большие разницы как для меня так и для поисковиков. Почему же фейсбук, эпл, гугл, и так далее, все они редиректят на www.site.com? значит они уверены что www должно быть, по крайней мере пока что.
Не совсем так: https://developers.facebook.com/ А Твиттер, например, никуда не редиректит, как и АлиЭкспресс. В случае ФБ www то ли используется по привычке (Твиттер и Али появились уже во времена, когда www считался архаизмом, а ФБ ещё застал времена www), то ли именно как поддомен, указывающий на пользовательскую часть (в отличии от портала для разработчиков или апи). С Гуглом та же история: https://developers.google.com/ Плюс, в таких крупных корпорациях решения принимаются очень долго и требуют достаточной аргументации. Если сайт 10 лет сидел на www, решение его убрать могут принимать ещё 10 лет.