如果文件夹中不存在文件,如何从根重写 URI?

如果文件夹中不存在文件,如何从根重写 URI?

我有一个static文件夹不在我的文档根目录中。我想重定向所有不在文档根目录中但存在于静态文件夹中的文件。(因此,如果同一个文件在两个地方,则将首先提供不在静态文件夹中的文件。)我该怎么做?以下方法不起作用:

DocumentRoot /srv/app/client/build/
Alias / /srv/app/client/static

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/
RewriteRule ^(.*)$ /$1

<Location />
    Order allow,deny
    Allow from all
</Location>

答案1

如果我理解正确的话,你正在尝试模拟 Nginx 的try_files功能,在这种情况下,看起来可能将为您服务。

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://app_cluster%{REQUEST_URI} [P,QSA,L]

答案2

来自 Apache 文档:使用 mod_rewrite 进行重定向和重新映射“在多个目录中搜索页面”部分,例如:

# first try to find it in root/...
# ...and if found stop and be happy:
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} -f
RewriteRule ^(.+) %{DOCUMENT_ROOT}/$1 [L]

# second try to find it in static/...
# ...and if found stop and be happy:
RewriteCond %{DOCUMENT_ROOT}/static/%{REQUEST_URI} -f
RewriteRule ^(.+) %{DOCUMENT_ROOT}/static/$1 [L]

相关内容