2015-02-09 2 views
-3

Я пытаюсь перенаправить пользователя на основе определенного URL-адреса.PHP 301 перенаправление на определенный URL

Если URL-адрес содержит определенный www и запрос URL-не содержитwww, то пользователь будет перенаправлен на версию URL www.

Если определенный URL не содержит www и запрос URL делает содержать www, то пользователь перенаправлять на не- www версию URL.

Он также должен учитывать субдомен и путь.

Я попытался следующие:

define(URL, 'localhost.com/cms'); 

$request = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"]; 

if (get_subdomain(URL) != get_subdomain($request)) { 
    header("HTTP/1.1 301 Moved Permanently", true, 301); 
    header('Location:' . URL . $_SERVER['REQUEST_URI']); 
} 

function get_subdomain($url){ 
    $sub = parse_url($url); 
    return $sub['host']; 
} 
+0

Привет Хейли. Не могли бы вы показать нам, что вы пробовали? –

+0

Вопросы, требующие кода, должны содержать хотя бы какой-то код или описание попыток, которые уже были сделаны. –

+0

@ RichardParnaby-King что я пробовал, как показано ниже, у него есть некоторые проблемы. define (URL, 'http://localhost.com/cms'); $ request = 'http: //'.$_SERVER [' HTTP_HOST ']. $ _ SERVER ["REQUEST_URI"]; if (get_subdomain (URL)! = Get_subdomain ($ request)) { \t заголовок («HTTP/1.1 301 Moved Permanentently», true, 301); \t header ('Местоположение:'. URL. $ _SERVER ['REQUEST_URI']); } function get_subdomain ($ url) { $ sub = parse_url ($ url); return $ sub ['host']; } – haley

ответ

0

В примере кода вы определили функцию ПОСЛЕ вы пытаетесь вызвать его. Вам нужно разместить вызов функции над вашим if заявления:

function get_subdomain($url){ 
    $sub = parse_url($url); 
    return $sub['host']; 
} 

if (get_subdomain(URL) != get_subdomain($request)) { 
    header("HTTP/1.1 301 Moved Permanently", true, 301); 
    header('Location:' . URL . $_SERVER['REQUEST_URI']); 
} 

define функция требует строки для первого параметра. Вам также не хватает http:// с вашего URL-адреса.

Ниже приведен пример пути (например, /cms), чтобы узнать, запросил ли пользователь правильную страницу (в противном случае они будут постоянно перенаправляться), а затем сравнивает хост. Хост будет содержать www. или другие биты поддоменов.

Я сделал if многострочный для удобочитаемости.

define('URL', 'http://localhost.com/cms'); 

$request = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"]; 

$urlParts = parse_url(URL); 
$requestParts = parse_url($request); 

if($urlParts['path'] == $requestParts['path'] // Are we looking at the same pages 
    && 
    $urlParts['host'] !== $requestParts['host'] // Check domain. Will also include sub-domain 
) { 
    // Failed check. Redirect to URL 
    header("HTTP/1.1 301 Moved Permanently", true, 301); 
    header('Location:' . URL); 
} 

Альтернативное решение сделать выше в файле .htaccess:

# If url begins with www, and we are on the right page, redirect to the non-www version 
RewriteCond %{HTTP_HOST} ^www.localhost\.com 
RewriteRule ^cms% http://localhost.com/cms [R=301,L] 
Смежные вопросы