RewriteCond文件存在

时间:2015-03-28 18:05:06

标签: .htaccess

这么简单的问题,但是htaccess和我从来没有相处过。

  1. 提供文件(如果存在)。
  2. 如果URI只是/且如果index.html存在,则提供index.html
  3. 否则请提供app.php
  4. 这是.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所以我需要文件存在检查。如果没有别的,我想了解为什么发布的行不起作用。

1 个答案:

答案 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}/前缀的原因。这里不需要逃避点。