2016-05-01 7 views
-1

Я делаю немного веб-разработки для моего клиента, и я столкнулся с контрольно-пропускным пунктом.Есть ли в заголовке PHP (перенаправление адреса :) :) указать веб-сайт, начинающийся с «http: //»?

** Вот что происходит: **

-Мы несколько копий одного и того же контактную форму на нашем сайте, но мы хотим, чтобы каждый, чтобы перенаправить на другую целевую страницу после завершения для того, чтобы отслеживать уровень конверсии ,

-В этом примере я работаю на странице about. Когда пользователь отправляет свой запрос для получения дополнительной информации, страница будет идеально перенаправляться на уникальную страницу «Спасибо» (например, www.sample.com/thank-you-about.html); однако это не так.

-Это сообщение будет отправлено отлично, но перенаправление никогда не состоится. Ошибок не возникает - ничего.

Прежде чем я покажу код, вот что я пытался, чтобы решить это самостоятельно:

-У создал тело HTML код под кодом .php, который отправляет форму его вклад в. Насколько мне известно, переадресации не происходит, поэтому я, очевидно, ее еще не видел.

-Я использовал вызов «Заголовок (Location: www.sample.com/thank-you-about.html)», но это тоже ничего не делает.

-Мы пытались использовать метод «frame.location» в Javascript, и, похоже, это не похоже на попытку php.

-Я сохранил исходную страницу и целевую страницу как .php-страницы, вне зависимости от того, что использование расширения .html лежит в основе проблемы; такой же результат.

Действительно, единственное, что я могу придумать, это тип соединения, не удовлетворяющий требованиям для вызова Header(). Но не выдаст ли сообщение об ошибке?

Вот контактная форма вопроса:

<form id="contactForm" class="get-in-touch contact-form light" action="thank-you-about.php" method="post"> 
         <input type="hidden" id="contact_nonce" name="contact_nonce" value="68592e213c"/><input type="hidden" name="" value="/"/> 
         <input type="hidden" name="contact-form-value" value="1"/> 
         <div class="iconic-input"> 
          <input class="name" type="text" name="name" placeholder="Name*"> 
          <i class="icons icon-user-1"></i> 
         </div> 
         <div class="iconic-input"> 
          <input class="email" type="text" name="email" placeholder="Email*"> 
          <i class="icons icon-email"></i> 
         </div> 
         <textarea class="msg" name="msg" placeholder="Message"></textarea> 
         <input type="submit" value="Send Message"> 
         <div class="iconic-button"> 
          <input type="reset" value="Clear"> 
          <i class="icons icon-cancel-circle-1"></i> 
         </div> 
        </form> 

Вот текущий файл .php, спасибо, что Вы about.php:

<?php 

// Define some constants 
define("RECIPIENT_NAME", "Sample"); 
define("RECIPIENT_EMAIL", "[email protected]"); 
define("EMAIL_SUBJECT", "New request from site sample webpage"); 

// Read the form values 
$success = false; 
$senderName = isset($_POST['name']) ? preg_replace("/[^\.\-\' a-zA-Z0-9]/", "", $_POST['name']) : ""; 
$senderEmail = isset($_POST['email']) ? preg_replace("/[^\.\-\_\@a-zA-Z0-9]/", "", $_POST['email']) : ""; 
$message = isset($_POST['msg']) ? preg_replace("/(From:|To:|BCC:|CC:|Subject:|Content-Type:)/", "", $_POST['msg']) : ""; 
$messageInterests = ""; 
$subject = ""; 
$currentURL = isset($_POST['current-URL'])? $_POST['current-URL'] : ""; 

//Parse checkboxes, include them in message body 
$interestArray = $_POST['interest']; 
if(!empty($interestArray)){ 
    $messageInterests .= "INFORMATION OF INTEREST: "; 
    $N = count($interestArray); 
    for($i = 0; $i < $N; $i++) 
    { 
     $messageInterests .= "\r\n" . $interestArray[$i]; 
    } 
    $subject .= $messageInterests . "\r\n \r\n"; 
} 
else { 
    $subject = "GENERAL INQUIRY \r\n \r\n"; 
} 

$subject .= $message; 
$message = $subject; 

// If all values exist, send the email 
if ($senderName && $senderEmail && EMAIL_SUBJECT && $message) { 
    $recipient = RECIPIENT_NAME . " <" . RECIPIENT_EMAIL . ">"; 
    $headers = "From: " . $senderName . " <" . $senderEmail . ">"; 
    mail($recipient, EMAIL_SUBJECT, $message, $headers); 
    header("Location: www.sample.com/thank-you-about.html"); /* Redirect browser */ 

} 

?> 

EDIT :: Прежде чем кто спрашивает, я знайте, что никакие флажки не обрабатываются из этой конкретной контактной формы. Они полезны на страницах обслуживания моего клиента, в то время как общие запросы обрабатываются на странице о странице, странице контактов и домашней странице.

SECOND EDIT :: Итак, я исправил проблему с абсолютным URL-адресом; однако проблема перенаправления все еще сохраняется. Спасибо всем за то, что вы так терпеливы!

+1

Нет лучшего места, чтобы начать, чем ручной http://php.net/manual/en/function.header.php –

+1

Без 'HTTP: //', он рассматривается как относительный URL, так бы что-то вроде 'http: // example.com/www.sample.com/thank-you-about.html' –

+0

В этом случае, если относительный URL-адрес не найден, не выводит ли он ошибку или по крайней мере, перенаправить на страницу 404? – user3579647

ответ

4

Есть ли заголовок PHP (местоположение :) перенаправление, необходимо указать веб-сайт , начинающийся с "http: //"?

Да, если вам нужно перенаправить в файл на другом домене , вы должны будете указать полный абсолютный URL, это включает в себя протокол (http, https и т.д.), Основанный на том, что это не работает:

header("Location: www.sample.com/thank-you-about.html"); 

использование:

header("Location: http://www.sample.com/thank-you-about.html"); 

Если вам необходимо перенаправить в файл на же домене вы можете использовать относительный путь:

header("Location: thank-you-about.html"); //thank-you-about.html is located on the same dir as the current script 

или

header("Location: /thank-you-about.html"); //thank-you-about.html is located on the root dir of the domain 

header() используются для отправки сырого заголовка HTTP. См. «HTTP/1.1 specification» для получения дополнительной информации о заголовках HTTP.

Узнайте больше о phpheader() функция.

+0

Я думаю, что вопрос скорее «почему» *, а не как исправление. –

+0

Повторите весь вопрос. Вы найдете * «Я пробовал использовать метод« frame.location »в Javascript, и он, похоже, не может быть больше, чем попытка php. -Я сохранил исходную страницу и страницу назначения как .php-страницы на случайности, что использование расширения .html лежит в основе проблемы, то же самое. »* - Итак, здесь есть что-то более глубокое. –

+0

Вызов 'header()' происходит внутри .php-файла, в который отправляется форма, если это имеет смысл. Это мое первое родео с таким кодированием, поэтому я не обвиняю вас в том, что меня путают с моими методами. ;) – user3579647

0

Мое предложение было бы передать параметр перенаправления как часть атрибута действий, т.е.

 ...action="sendEmail.php?redirect=thank-you-about" method="post"> 

Затем прочитал его на стороне сервера и перенаправить соответственно.

// do your sending email logic here, then redirect: 
$r = $_GET['redirect]; 
switch($r){ 
    case: 'thank-you-about': 
    header("Location: /thank-you-about.html"); die(); 
    // it might be tempting to go 'header("Location: /$r")' directly, but this would introduce quite a security vulnerability. 

    break; 

    case: 'otherpage': 
    header("Location: /thank-you-other.html"); die(); 
    break; 

    default: 
     header("Location: /thank-you-default.html"); die(); 
    break; 
    } 
+0

'$ _POST ['redirect']' не существует. Вы ищете '$ r = $ _GET ['redirect];' – Marcus

+0

А это правда. моя вина. –

+0

Hey @RidIculous, спасибо за ваше представление. Это потрясающая идея, но, к сожалению, я все еще испытываю такую ​​же проблему. Я обязательно буду реализовывать это, как только это закончится! – user3579647

 Смежные вопросы

  • Нет связанных вопросов^_^