1

Моя страница ошибок является PHP файлов, полнота которыхизбежать 302 редиректа при настройке нескольких страниц 404

<?php 
$path_parts = pathinfo($_SERVER['REQUEST_URI']); 
$parts = explode('/', $path_parts['dirname']); 
if (in_array("abcde", $parts)) 
{ 
    header('Location: https://example.com/vwxyz/abcde-error-page.php'); 
    exit(); 
} 
else 
{ 
    header('Location: https://example.com/vwxyz/error-404-page.php');  
    exit(); 
} 
?> 

Я хочу, чтобы пользователи, которые идут к несуществующему URL в «ABCDE» директории см. конкретную страницу с ошибкой, а URL должен быть https://example.com/vwxyz/abcde-error-page.php, а код состояния должен быть 302. Это работает нормально.

Я хочу, чтобы пользователи, которые идут в любой другой несуществующей URL (в директории «VWXYZ», или где-нибудь еще на example.com), чтобы видетьhttps://example.com/vwxyz/error-404-page.php, но для кода 404 состояния должны быть возвращены, и URL в своем браузере все равно должен быть тем, на что они ошибочно вводили. Конечно, это не работает с заголовком («Местоположение ... и я не могу использовать file_get_contents или include, потому что результат опустошает корзину покупок и выводит пользователя (если они вошли в систему).

Я чувствую, что есть более простой способ иметь несколько страниц 404 без редактирования файла .htaccess (хотя этот аргумент, вероятно, быть сделано, что это действительно простой способ).И очень важно, чтобы главная страница ошибки отображалась как обычная страница с ошибкой, а другая (для каталога «abcde») была перенаправлением и что эта специальная страница ошибки для каталога «abcde» НЕ находится в этом каталоге (пользователь перенаправляется из каталога, а затем показывает страницу «ошибка», которая НЕ должна возвращать статус 404).

+0

* "Я чувствую, что есть более простой способ, чтобы иметь несколько 404 страниц без редактирования файла .htaccess (хотя этот аргумент будет вероятно, будет сделано, что это действительно более простой способ). * ... yup, я уверен, что это будет 3 строки .htaccess – CD001

ответ

1

Если я правильно понял вопрос, это is довольно простой через корень .htaccess файл.

# enable mod_rewrite and route the request 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} ^/abcde/?.*$ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.*$ /vwxyz/abcde-error-page.php [R=302,L] 

# sets a custom 404 page 
ErrorDocument 404 /vwxyz/error-404-page.php 

Прежде всего, необходимо переключить перепишем двигатель на, а затем выполнить 3 проверки:

  1. начать ли URL с /abcde/
  2. ли URL не файл
  3. ли URL не a

Если эти вещи все верно, то вы хотите, чтобы маршрут (с 302), чтобы /vwxyz/abcde-error-page.php

Для любой подлинной ошибки 404, вы можете просто использовать синтаксис по умолчанию ErrorDocument 404 ....

(КИ это было 6 строк в .htaccess - в два раза так сложно, как я понял)

+0

Это отлично работает; кажется, что реальной проблемой было действительно то, что я стараюсь делать все на PHP, когда чаще подходят другие методы. – jfxamilton