将非 WWW 重定向到 WWW URL

问题描述 投票:0回答:7

当人们访问我的域时,它会被重定向到 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

用户仍然可以通过键入 http://mydomain.com/en/page-a1/abc.phphttp://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,禁止访问没有www的网址。

php apache .htaccess redirect
7个回答
13
投票
$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 中


5
投票
<?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;
}
?>

工作正常


4
投票

我不确定如何通过 .htaccess 执行此操作,但我自己在为每个文件加载的

config.php
中使用 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']);

2
投票

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
投票

我认为您想要重定向用户而不是重写 URL,在这种情况下使用

Redirect
或 'RedirectMatch` 指令。 http://httpd.apache.org/docs/2.3/rewrite/remapping.html#old-to-new-extern


0
投票
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>

0
投票

请检查 htaccess 是否正确非 WWW 到 WWW 重定向 URL

重写引擎开启

RewriteCond %{HTTP_HOST} ^mydomain.co.uk [NC]

RewriteRule ^(.*)$ https://www.mydomain.co.uk/$1 [L,R=301]

© www.soinside.com 2019 - 2024. All rights reserved.