Я сделал сайт электронной коммерции, где после размещения заказа я перенаправляю пользователей на страницу успеха с номером заказа. Если номер заказа не существует, то идентификатор будет передан. Но есть проблема, когда не существует ни номера заказа, ни идентификатора заказа, тогда на странице успеха отображаются некоторые предыдущие заказы, размещенные при вставке прямого URL. Например: www.mywebsite.com/order/success/5000
здесь 5000 не существует, поэтому он должен перенаправить меня на страницу ошибки 404.
MY_controller
$order_num = $this->order_model->getOrderNum($order_id);
if(empty($order_num)){
$order_num = $order_id.'/id';
}
$redirect_url = 'order/success/'.$order_num.'/';
?>
<script>
function redirect_success(url) {
location.assign(url);
}
var success = '<?=$redirect_url?>';
redirect_success(success);
</script>
My_Model
public function getOrderNum($order_id = ''){
$returnVal = false;
$sql = "SELECT order_num FROM order_table";
$sql .= " WHERE order_id = '{$order_id}'";
$query = $this->db->query($sql);
if($query->num_rows() > 0){
$result = $query->result_array();
$row = $result[0];
$returnVal = $row;
}
return $returnVal['order_num'];
}
Одним из способов является проверка в контроллере порядка / успеха, идет ли страница-реферер со страницы заказа / места.
Таким образом, в порядке / успехе, если заголовок http_referer не установлен или нет из порядка / места, перенаправьте на 404.
Добавьте в порядке / успех / контроллер:
if( !isset($_SERVER['HTTP_REFERER']) || strpos($_SERVER['HTTP_REFERER'], "order/place") === -1 ) {
$this->load->helper('url');
redirect('/page404');
}
Других решений пока нет …