То, как мой сайт в настоящее время структурирован, фактический сайт находится в отдельной папке. Вот что я имею в виду:
/projects
/files
/pictures
/tools
/school
/~webroot
.htaccess
Это значительно упрощает управление файловой системой и ее навигацию. Простой способ использовать это, не заставляя всех переходить к http://domain.com/~webroot/
и по-прежнему разрешать им доступ к файлам и таким, как http://domain.com/projects/
, - это использовать htaccess
, который я написал ниже, для проверки файлов в реальном корне, и ~ каталоги webroot.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /~webroot/$1 [NC,QSA]
RewriteRule ^/?$ /~webroot/index.php [L,QSA]
Однако, если файл нигде не существует (root или ~ webroot), вместо HTTP 404 выдается ошибка HTTP 500. Чтобы отобразить мою страницу ошибки 404, я должен вместо этого использовать следующие строки:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/~webroot/$0 !-F
RewriteRule ^(.*)$ /404.shtml [B,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !^/~webroot
RewriteRule ^(.*)$ /~webroot/$1 [NC,QSA]
RewriteRule ^/?$ /~webroot/index.php [L,QSA]
Это все довольно грязно, и это всего лишь уловка и фактически не выдает HTTP 404, который удерживает 404 от документирования с помощью моего статистического приложения. Есть ли способ: проверить, существует ли файл в корне, если нет, проверить, существует ли файл в ~ webroot, если нет, выдать ошибку реального HTTP 404?
У меня также все мои ErrorDocument
определены правильно.