Перенаправить не WWW на WWW URL - PullRequest
7 голосов
/ 29 августа 2011

Когда люди получают доступ к моему домену, он перенаправляется на 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

, чтобы перенаправить людей с non www на www,

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

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

Ответы [ 6 ]

13 голосов
/ 29 августа 2011
$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

4 голосов
/ 29 августа 2011

Я не уверен, как сделать это через .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']);

РЕДАКТИРОВАТЬ: @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']);
1 голос
/ 20 июня 2016
<?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;
}
?>

работает правильно

1 голос
/ 29 августа 2011

Добавьте 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]
0 голосов
/ 29 августа 2011

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

0 голосов
/ 29 августа 2011
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>
...