Я делаю страницу 404 с кнопкой для отчета пользователя, что на сайте есть проблема. Идея заключается в том, что когда пользователь нажимает кнопку, я получаю электронное письмо с информацией о последней доступной странице …
Проблема в том, что я использую переменную php ‘$ _SERVER [‘ HTTP_REFERER ‘]’, и это всегда возвращает нулевое значение. Я нашел этот вопрос (В каких случаях HTTP_REFERER будет пустым) и я пришел к выводу, что эта переменная не является решением.
Это мой .htacess
RewriteEngine on
ErrorDocument 404 http://example.com/erro.php
#ErrorDocument 404 /erro.php #this doesnt work... redirect doesnt work
На странице erro.php у меня есть код с функцией email, который работает без проблем, но мне нужен какой-то способ, чтобы взять последнюю страницу, которая вызвала ошибку.
На странице 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 для отправки по электронной почте?
Как вы готовы работать с 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
Конечный результат для посетителя должен быть почти таким же, но у вас будет доступ к нужным вам данным.
mod_rewrite
шпаргалка: http://www.cheatography.com/davechild/cheat-sheets/mod-rewrite/mod_rewrite
: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.htmlДругих решений пока нет …