2014-09-04 2 views
2

У меня есть сайт, где каждый из моих пользователей есть CMS, установленный в другом каталоге, структура, как:Htaccess пользовательский каталог для ошибки 404

/ (root) 
/cms_user1/ 
/cms_user1/404.php 
/cms_user1/.htaccess 
/cms_user2/ 
/cms_user2/404.php 
/cms_user2/.htaccess 

В каждом файле .htaccess есть:

ErrorDocument 404 /404.php 

проблема заключается в том, что в этом случае страница 404.php не загружен на /cms_client1/404.php, но вместо того, чтобы в корне, то есть /404.php

Существует способ загрузить 404.php в каталог пользователя автоматически, без указания имени каталога?

PS: единственный способ я нашел до сих пор, чтобы указать имя каталога в каждом .htaccess (что в моем случае это не лучший вариант, потому что я должен редактировать каждый HTAccess), как это:

ErrorDocument 404 /directory/404.php 

ответ

3

Bad News: Использование 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] 
+1

+1 элегантное решение –

+0

спасибо, но ваш код работает только на главном каталоге (например,/cms_user1/invalid_dir или /cms_user1/invalid_file.php), но не в подкаталоге (пример/cms_user1/valid_dir/invalid). Кроме того, есть способ справиться с ошибками ohter (например, 400, 401, 403, 500)? – ipel

+0

Это правило должно работать для любого пути 404, так что оно будет работать и для '/ cms_user1/valid_dir/invalid'. Но да, это не сработает для 400, 401, 403, 500 и т. Д. – anubhava

Смежные вопросы