当前 apache/php 的设置将始终 return 200 页而不是 404 页
Current setting up for apache/php will always return a 200 page instead of 404
更新:我添加了一个 404 错误文档:
<IfModule mod_rewrite.c>
RewriteEngine on
ErrorDocument 404 /new404.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path= [NC,L,QSA]
</IfModule>
但什么都没有改变。
我的 apache 片段有问题:
RewriteRule ^(.*)$ /index.php?path= [NC,L,QSA]
在
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path= [NC,L,QSA]
</IfModule>
我创建是为了获得这样的 URL:
http://localhost:8888/en
http://localhost:8888/en/team
http://localhost:8888/en/anything
我这样调用 PHP 文件:
team-en.html.php
anything-en.html.php
这是因为我有不同的语言。
现在,这是我用来显示它们的 PHP 文件:
$path = isset($_GET['path']) ? $_GET['path'] : false;
$path = strtolower($path);
$path = preg_replace("/[^a-z-\/]/", '', $path);
$parts = explode("/", $path);
if (is_array($parts) && isset($parts[1])) {
if (file_exists(__DIR__ . '/processors/' . $parts[1] . '.php')) {
$processor = $parts[1];
}
if (file_exists(__DIR__ . '/pages/' . $parts[1] . '-'. $language .'.html.php')) {
$page = $parts[1];
}
}
其中语言变量是:
$language = 'en';
$languages = [];
$languages[] = 'en';
$languages[] = 'nl';
$languages[] = 'fr';
现在,出于某种原因,这不会 return 404 页面,而 return 只有 200 header 响应。
想知道有没有人有搭建404页系统的经验,我看了很多教程,但是none给了我一个满意的答案。
提前致谢
重写规则匹配 所有 路由。 Apache 无法抛出 404 错误,因为它不知道您的应用程序在做什么。
您需要在 PHP 代码中检查您的应用程序本身是否应该抛出此类错误。如果子文件夹中的文件符合此条件,您可以这样写:
if (is_array($parts) && isset($parts[1])) {
if (file_exists(__DIR__ . '/processors/' . $parts[1] . '.php')) {
$processor = $parts[1];
}
if (file_exists(__DIR__ . '/pages/' . $parts[1] . '-'. $language .'.html.php')) {
$page = $parts[1];
} else {
http_response_code(404);
die();
}
}
更新:我添加了一个 404 错误文档:
<IfModule mod_rewrite.c>
RewriteEngine on
ErrorDocument 404 /new404.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path= [NC,L,QSA]
</IfModule>
但什么都没有改变。
我的 apache 片段有问题:
RewriteRule ^(.*)$ /index.php?path= [NC,L,QSA]
在
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path= [NC,L,QSA]
</IfModule>
我创建是为了获得这样的 URL:
http://localhost:8888/en
http://localhost:8888/en/team
http://localhost:8888/en/anything
我这样调用 PHP 文件:
team-en.html.php
anything-en.html.php
这是因为我有不同的语言。
现在,这是我用来显示它们的 PHP 文件:
$path = isset($_GET['path']) ? $_GET['path'] : false;
$path = strtolower($path);
$path = preg_replace("/[^a-z-\/]/", '', $path);
$parts = explode("/", $path);
if (is_array($parts) && isset($parts[1])) {
if (file_exists(__DIR__ . '/processors/' . $parts[1] . '.php')) {
$processor = $parts[1];
}
if (file_exists(__DIR__ . '/pages/' . $parts[1] . '-'. $language .'.html.php')) {
$page = $parts[1];
}
}
其中语言变量是:
$language = 'en';
$languages = [];
$languages[] = 'en';
$languages[] = 'nl';
$languages[] = 'fr';
现在,出于某种原因,这不会 return 404 页面,而 return 只有 200 header 响应。
想知道有没有人有搭建404页系统的经验,我看了很多教程,但是none给了我一个满意的答案。
提前致谢
重写规则匹配 所有 路由。 Apache 无法抛出 404 错误,因为它不知道您的应用程序在做什么。
您需要在 PHP 代码中检查您的应用程序本身是否应该抛出此类错误。如果子文件夹中的文件符合此条件,您可以这样写:
if (is_array($parts) && isset($parts[1])) {
if (file_exists(__DIR__ . '/processors/' . $parts[1] . '.php')) {
$processor = $parts[1];
}
if (file_exists(__DIR__ . '/pages/' . $parts[1] . '-'. $language .'.html.php')) {
$page = $parts[1];
} else {
http_response_code(404);
die();
}
}