.htaccess重定向通常用于静态文件夹

.htaccess redirect normally for static folder

提问人:Shinigami Ryoutaro 提问时间:11/11/2023 更新时间:11/11/2023 访问量:32

问:

我有一个文件,可以将每个请求重定向到 .但是对于文件夹中的静态文件,我想为它们启用正常重定向。.htaccess./core/index.php./node_modules/./assets/

所以

  1. 如果请求:->重定向到:url/whatever/page/core/index.php
  2. 如果请求:-> get:url/assets/image/file.pngassets/image/file.png
  3. 如果请求:-> get:url/node_modules/css/file.cssnode_modules/css/file.css

我目前的代码:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ core/index.php [L,QSA]
Apache .ht访问

评论


答:

1赞 Hind Sagar Biswas 11/11/2023 #1

因此,您可以做的是首先检查它是否转到资产,然后重定向到那里,然后node_modules。如果现在是这样,那么如果条件都不满足,则重定向到索引:

RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}/assets/$1 -f
RewriteRule ^(.+) assets/$1 [L]

RewriteCond %{DOCUMENT_ROOT}/node_modules/$1 -f
RewriteRule ^(.+) node_modules/$1 [L]

RewriteCond %{THE_REQUEST} \s/assets/ [NC,OR]
RewriteCond %{THE_REQUEST} \s/node_modules/ [NC,OR]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ core/index.php [L,QSA]

评论

1赞 arkascha 11/11/2023
为什么要检查,为什么要重写?请求示例已经具有路径前缀(“/assets/”和“/node_modules/”),这些规则会将其加倍。所以很可能会打破这些请求。
0赞 Hind Sagar Biswas 11/11/2023
好吧,我也在我的框架和其他路由中使用类似的代码......而且它根本不会破裂
1赞 arkascha 11/11/2023
如果请求尚未包含这些前缀,则会出现这种情况。但在这里,他们做到了。因此,这些规则将请求重写为...这甚至可能使用该标志实现无休止的重写循环....../assets/image/file.png/assets/assets/image/file.png[L]
0赞 Hind Sagar Biswas 11/11/2023
真?那为什么我没有遇到任何这样的问题呢?
1赞 arkascha 11/11/2023 #2

我不太确定你说的“我想为他们启用正常重定向”是什么意思......在我看来,您实际显示的示例似乎根本不希望对这两个基本路径应用任何重写或重定向。如果是这样,那么有两种选择:

任一使用条件:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/assets/
RewriteCond %{REQUEST_URI} !^/node_modules/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ core/index.php [L,QSA]

或显式例外:

RewriteEngine On
RewriteRule ^/?assets/ - [END]
RewriteRule ^/?node_modules/ - [END]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ core/index.php [L,QSA]