.htaccess mod_rewrite:如果该文件存在于另一个目录中,则使用该目录

hwazgwia  于 2023-06-24  发布在  其他
关注(0)|答案(2)|浏览(163)

我有一个网站在example.com/test/。假设网站是这样设计的:

example.com
└── test/
    ├── assets/
    │   └─ stylesheet.css
    │
    ├── .htaccess
    └── index.php

index.php这里是路由器,现在这样做显然很酷。
每当用户请求像example.com/test/stylesheet.css这样的页面时,我都想检查assets/是否有该文件,如果有,就提供该文件,而不是将URL提供给index.php。理想情况下,以下内容将起作用:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond assets/%{REQUEST_FILENAME} -f
RewriteRule ^(.+)$ assets/$1

但由于%{REQUEST_FILENAME}是一条绝对路径,因此assets/%{REQUEST_FILENAME}的结果类似于assets/home/public/test/stylesheet.css%{REQUEST_URI}没有更好:就变成了assets/test/stylesheet.css我也看了this question,但答案也不起作用。
有没有什么方法,而不诉诸PHP,做到这一点?(如果没有,我将只使用PHP的readfile,但我不想担心LFI或其他问题。

rur96b6h

rur96b6h1#

尝试使用the %{DOCUMENT_ROOT}%{REQUEST_URI}变量

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/assets/%{REQUEST_URI} -f
RewriteRule ^(.+)$ assets/$1

编辑:我明白了,试试这个:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/([^/]+)/(.+)$
RewriteCond %{DOCUMENT_ROOT}/%1/assets/%2 -f
RewriteRule ^(.*)$ /%1/assets/%2 [L,R]
yvgpqqbh

yvgpqqbh2#

我有一个WordPress站点,并试图使用这个文件wp-content/uploads/.htaccess从四个备选目录中提供资源:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} ([^/]+$)
    RewriteCond %{DOCUMENT_ROOT}/wp-content/uploads/2020/12/$1 -f
    RewriteRule ([^/]+$) %{DOCUMENT_ROOT}/wp-content/uploads/2020/12/$1 [NC,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} ([^/]+$)
    RewriteCond %{DOCUMENT_ROOT}/wp-content/uploads/2023/04/$1 -f
    RewriteRule ([^/]+$) %{DOCUMENT_ROOT}/wp-content/uploads/2023/04/$1 [NC,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} ([^/]+$)
    RewriteCond %{DOCUMENT_ROOT}/wp-content/uploads/2023/05/$1 -f
    RewriteRule ([^/]+$) %{DOCUMENT_ROOT}/wp-content/uploads/2023/05/$1 [NC,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} ([^/]+$)
    RewriteCond %{DOCUMENT_ROOT}/wp-content/uploads/2023/06/$1 -f
    RewriteRule ([^/]+$) %{DOCUMENT_ROOT}/wp-content/uploads/2023/06/$1 [NC,L]

</IfModule>

而且成功了

相关问题