Перенаправление URL-адресов, не относящихся к WWW-WWW

Когда люди обращаются к моему домену, он перенаправляется на http://www.mydomain.com/en/index.php, используя php-код. Я добавил следующий код в .htaccess

RewriteEngine on Options +FollowSymlinks RewriteBase / RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] RedirectPermanent /pages/abc-123.html http://www.mydomain.com/en/page-a1/abc.php 

для перенаправления людей с не www на www ,

Все еще пользователи могут получить доступ, набрав URL http://mydomain.com/en/page-a1/abc.php и http://www.mydomain.com/en/page-a1/abc.php.

Кто-нибудь знает, что метод полностью перенаправляется на http://www.mydomain.com/en/page-a1/abc.php, даже если пользователь напечатал http://www.mydomain.com/en/page-a1/abc. php и запретить доступ к URL-адресам без www.

 $protocol = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://"; if (substr($_SERVER['HTTP_HOST'], 0, 4) !== 'www.') { header('Location: '.$protocol.'www.'.$_SERVER['HTTP_HOST'].'/'.$_SERVER['REQUEST_URI']); exit; } 

в php

Я не уверен, как это сделать через .htaccess, но я делаю это с PHP-кодом сам в моем config.php который загружается для каждого файла.

 if(substr($_SERVER['SERVER_NAME'],0,4) != "www." && $_SERVER['SERVER_NAME'] != 'localhost') header('Location: http://www.'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']); 

EDIT: @genesis, вы правы, я забыл о https

+ Изменить

 header('Location: http://www.'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']); 

в

 header('Location: '. (@$_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://'). 'www.'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']); 

Добавьте RewriteEngine On перед RewriteCond чтобы включить ваши правила перезаписи:

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

И если у вас есть https:

 RewriteEngine On RewriteRule .? - [E=PROTO:http] RewriteCond %{HTTPS} =on RewriteRule .? - [E=PROTO:https] RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ %{ENV:PROTO}://www.%{HTTP_HOST}/$1 [R=301,L] 

Я думаю, вы хотите перенаправить пользователя, а не переписывать URL-адрес, в этом случае используйте Redirect или директив RedirectMatch. http://httpd.apache.org/docs/2.3/rewrite/remapping.html#old-to-new-extern

 Redirect 301 /pages/abc-123.html http://www.mydomain.com/en/page-a1/abc.php <IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine on # mydomain.com -> www.mydomain.com RewriteCond %{HTTP_HOST} ^mydomain.com RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L] </IfModule> 
 <?php $protocol = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://"; if (substr($_SERVER['HTTP_HOST'], 0, 4) !== 'www.') { header('Location: '.$protocol.'www.'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); exit; } ?> 

Работает должным образом