这么简单的问题,但是htaccess和我从来没有相处过。
这是.htaccess:
# Disable the directory processing, Apache 2.4
DirectoryIndex disabled xxx
RewriteEngine On
# Serve existing files
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]
# For / serve index.html if it exists
RewriteCond %{REQUEST_URI} ^/$
RewriteCond index.html -f
RewriteRule .? index.html [L]
# Otherwise use front controller
RewriteRule .? app.php [L]
如果我注释掉RewriteCond index.html -f行,只要index.html确实存在,它就可以工作。但我也想检查index.php所以我需要文件存在检查。如果没有别的,我想了解为什么发布的行不起作用。
答案 0 :(得分:2)
这应该有效:
# Disable the directory processing, Apache 2.4
DirectoryIndex disabled xxx
RewriteEngine On
# Serve existing files
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
# For / serve index.html if it exists
RewriteCond %{DOCUMENT_ROOT}/index.html -f [NC]
RewriteRule ^/?$ index.html [L]
# Otherwise use front controller
RewriteRule ^ app.php [L]
请注意,RewriteCond
-f
或-d
的{{1}}需要文件或目录的完整路径,这就是您需要在文件名前添加%{DOCUMENT_ROOT}/
前缀的原因。这里不需要逃避点。