2015-05-01 3 views
1

Я делаю страницу 404 с кнопкой для отчета пользователя о том, что на сайте возникли проблемы. Идея заключается в том, когда пользователь нажимает кнопку, я получаю электронное письмо с информацией о последней странице, доступной ...Сообщить об ошибке 404 по электронной почте с последним адресом доступа

Проблема в том, что я использую переменную php '$ _SERVER [' HTTP_REFERER ']', и это когда-либо вернуть нулевое значение. Я нашел этот вопрос (In what cases will HTTP_REFERER be empty), и я пришел к выводу, что эта переменная не является решением.

Это мой .htacess

RewriteEngine on 
ErrorDocument 404 http://example.com/erro.php 
#ErrorDocument 404 /erro.php #this doesnt work... redirect doesnt work 

На странице erro.php У меня есть код с функцией электронной почтой, которые работают без проблем, но мне нужно каким-то образом взять последнюю страницу доступа, которые генерируют ошибку.

На странице erro.php Я пытаюсь использовать:

echo $_SERVER['HTTP_REFERER']; // return null value 
echo $_SERVER['REQUEST_URI']; // return page http://example.com/erro.php 

Я пытаюсь использовать вариант с JQuery (https://stackoverflow.com/a/2415645/2761794):

На странице erro.php

$(document).ready(function() { 
    var referrer = document.referrer; 
    alert(referrer); // return null value 
}); 

Некоторые предложения получить последний доступный URL-адрес на странице erro.php для отправки по электронной почте?

+0

Действительно не имеет смысла, чтобы пользователи сообщали об ошибках. Они, скорее всего, нажмут на свою кнопку. Используйте свои журналы ошибок на сервере – charlietfl

+0

Я не вижу журналы, где я работаю, мне приходится управлять многими сайтами и делать больше сайтов каждый день, поэтому не стоит смотреть журналы. – rafaelfndev

+0

Настройте задания cron для чтения журналов, затем – charlietfl

ответ

1

Как вы согласны работать с mod_rewrite в любом случае и имеете PHP, есть несколько иной подход.

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

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
Rewriterule ^(.*) /erro.php?error_path=$1 [R=301,L] 

В зависимости от конкретной установки может потребоваться настроить эту последнюю строку, возможно,

Rewriterule ^(.*) http://example.com/erro.php?error_path=$1 [R=301,L] 

Я считаю, что mod_rewrite несколько сродни вуду и может иногда нужно немного «попробовать и посмотреть, что работает".

Затем в файле erro.php:

<?php 
    $badfile = $_GET['error_path']; // the URL that 404'd 
    http_response_code(404); // send the 404 header code 
    // ... your other code 

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

+1

Отлично! благодаря! – rafaelfndev