Когда люди обращаются к моему домену, он перенаправляется на 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; } ?>
Работает должным образом