ipe*_*pel 2 .htaccess http-status-code-404
我有一个网站,每个用户的cms安装在不同的目录中,其结构类似于:
/ (root)
/cms_user1/
/cms_user1/404.php
/cms_user1/.htaccess
/cms_user2/
/cms_user2/404.php
/cms_user2/.htaccess
Run Code Online (Sandbox Code Playgroud)
每个.htaccess文件中都有:
ErrorDocument 404 /404.php
Run Code Online (Sandbox Code Playgroud)
问题是,这样,页面404.php不会加载到/cms_client1/404.php上,而是加载到根目录中,即/404.php
有一种方法可以自动将404.php加载到用户目录中,而无需指定目录名?
PS:到目前为止,我发现的唯一方法是在每个.htaccess中指定目录名称(在我的情况下,这不是最佳选择,因为我必须编辑每个htaccess),如下所示:
ErrorDocument 404 /directory/404.php
Run Code Online (Sandbox Code Playgroud)
坏消息:使用ErrorDocument您无法做到。
好消息:可以使用mod_rewrite规则。
在您的问题中显示的每个.htaccess中,您都可以具有如下规则:
RewriteEngine On
# Determine the RewriteBase automatically/dynamically
RewriteCond $0#%{REQUEST_URI} ^([^#]*)#(.*)\1$
RewriteRule ^.*$ - [E=BASE:%2]
# if request is not for a file
RewriteCond %{REQUEST_FILENAME} !-d
# if request is not for a directory
RewriteCond %{REQUEST_FILENAME} !-f
# forward it to 404.php in current directory
RewriteRule . %{ENV:BASE}/404.php [L]
Run Code Online (Sandbox Code Playgroud)