我试图从子目录中加载文件,如果它们不存在于根目录中,并且只有在子目录中确实存在时才会这样做。
RewriteEngine On
# If requested resource exists as a file or directory, skip next two rules
RewriteCond %{DOCUMENT_ROOT}/$1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/$1 -d
RewriteRule (.*) - [S=2]
# Requested resource does not exist, do rewrite if it exists in /pages
RewriteCond %{DOCUMENT_ROOT}/pages/$1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/pages/$1 -d
RewriteRule (.*) /pages/$1 [L]
# Else rewrite requests for non-existent resources to /index.php
# Disabled to see when the files fail to load
#RewriteRule (.*) /index.php?q=$1 [L]
# Remove file extention
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
# Error Documents
ErrorDocument 400 /400.shtml
ErrorDocument 404 /404.shtml
ErrorDocument 500 /500.shtml
以下网址
以下不起作用
有谁知道我在这种情况下做错了什么?此外,我确定它与我如何解决丢失的文件重定向有关,但是当服务器返回404错误时,404.shtml页面无法加载。
答案 0 :(得分:2)
原因是您在删除其扩展名时检查文件是否存在。当然,它不会存在。此外,您重新使用扩展程序的规则也不知道还要检查/ pages /目录。
尝试类似的事情:
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/pages/$1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/pages/$1 -d
RewriteRule (.*) /pages/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.html -f
RewriteRule ^(.*)$ /$1.html [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^(.*)$ /$1.php [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/pages/$1\.html -f
RewriteRule ^(.*)$ /pages/$1.html [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/pages/$1\.php -f
RewriteRule ^(.*)$ /pages/$1.php [L]