我的错误页面是一个PHP文件,其全部是
<?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();
}
?>
我希望访问“abcde”目录中不存在的URL的用户看到特定的错误页面,URL应为https://example.com/vwxyz/abcde-error-page.php,状态代码应为302.这样工作正常
我希望转到任何其他不存在的网址(在“vwxyz”目录或example.com上的任何其他位置)的用户看到 https://example.com/vwxyz/error-404-page.php,但是对于404要返回的状态代码,浏览器中的URL应该仍然是他们错误输入的内容。当然,这不适用于标题('位置...我不能使用file_get_contents或包含因为结果清空购物车并注销用户(如果他们已登录)。
我觉得有一种更简单的方法可以拥有多个404页面,而无需编辑.htaccess文件(虽然可能会提到这个参数确实是更简单的方法)。并且至关重要的是,主错误页面的行为与普通错误页面完全相同,但另一个(对于“abcde”目录)是重定向,并且“abcde”目录的特殊错误页面不在该目录中(用户被重定向到目录之外,然后显示“错误”页面,该页面不应返回404状态。)
答案 0 :(得分:1)
如果我正确理解了这个问题,那么通过根.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次检查:
/abcde/
如果这些都是真的那么你想要(用302)路由到/vwxyz/abcde-error-page.php
对于任何正版404错误,您只需使用默认的ErrorDocument 404 ...
语法即可。
(好的,这是.htaccess中的6行 - 比我想的复杂两倍)