Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用.htaccess设置位于同一文件夹中的404错误文档_Php_Apache_.htaccess - Fatal编程技术网

Php 使用.htaccess设置位于同一文件夹中的404错误文档

Php 使用.htaccess设置位于同一文件夹中的404错误文档,php,apache,.htaccess,Php,Apache,.htaccess,所以。。。我正在尝试设置与.htaccess(位于网站“根目录”)位于同一目录中的错误文档的路径,如下所示: ErrorDocument 404 404.php 但是,它没有显示网页,而是在屏幕上写入404.php。我不能使用绝对路径,如: ErrorDocument 404 /404.php 因为我不是为我做的网站,我不知道该网站将存储在文件夹的绝对路径 我的问题是:我可以在.htaccess文档中设置相对路径而不是绝对路径吗?(如果是……如何?当在.htacc

所以。。。我正在尝试设置与.htaccess(位于网站“根目录”)位于同一目录中的错误文档的路径,如下所示:

       ErrorDocument 404 404.php
但是,它没有显示网页,而是在屏幕上写入404.php。我不能使用绝对路径,如:

       ErrorDocument 404 /404.php
因为我不是为我做的网站,我不知道该网站将存储在文件夹的绝对路径


我的问题是:我可以在.htaccess文档中设置相对路径而不是绝对路径吗?(如果是……如何?

当在
.htaccess
上下文中有许多指令对相对目录敏感时,
ErrorDocument
则不敏感。根据:

URL可以以斜杠(/)开头表示本地web路径(相对于 DocumentRoot),或者是客户端可以解析的完整URL


ErrorDocument指令参数中的URL路径始终相对于DocumentRoot

但是,您可以使用mod_rewrite模块解决此问题

RewriteEngine on
#if requested resource isn't a file
# and isn't a directory
# then serve local error script 
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteRule .* 404.php [L] 
确保404.php确实发出404响应头

我还没有测试过,但这应该可以让你开始。还请注意,使用ErrorDocument指令总是比这更好,询问站点相对于DocumentRoot的位置是明智的,这样您就可以编写

ErrorDocument 404 /path/to/my/site/404.php

ErrorDocument
路径与
DocumentRoot
服务器设置相关,该设置通常位于
/etc/apache2/sites enabled/000 default.conf
文件中的外观如下:

<VirtualHost *:80>   <---------------- VirtualHost on port 80 is generally internet traffic
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/   <-------- this is what we're looking at
</VirtualHost>

尝试用一个额外的点指定它在同一目录中:ErrorDocument 404./404.phptried已经..不工作..它只是显示。/404.phpthank你的答案…我想我会问一下站点在哪里…在同一行上的
RewriteCond
之后有一个注释将导致500服务器错误的消息
RewriteCond:bad flag delimiter
。PHP 5.2不再支持完整URL。您将在服务器日志中收到多个通知:[通知]无法在401 ErrorDocument指令中使用完整URL---忽略!