我正在尝试创建位于根Web服务器目录中的.htaccess文件。在根目录中,还会有名为backend/和frontend/+的目录(它们的名称是可变的(。
当前树可能如下所示:
/
.htaccess
frontend/
static/
index.html
manifest.json
backend/
files/
index.php
other/
由于前端(React(和后端(PHP(由其他人完成,并且使用CI进行部署,因此我无法控制这两个目录中的文件和文件夹。
我试图用.htaccess文件完成的是:
- 重写(而不是重定向(所有进入
/**
但自身不存在的内容到/frontend/**
/frontend/**
中不存在的所有内容都应返回/frontend/index.html
以下是一些例子:
/
变为/frontend/
(#1(/index.html
变为/frontend/index.html
(#1(/manifest.json
变为/frontend/manifest.json
(#1(/static/script.js
变为/frontend/static/script.js
(#1(/module
变为/frontend/index.html
(#1和#2(/backend/**
不会因为目录存在而被重写/other/**
不会因为目录存在而被重写
我当前的文件如下:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
# Rewrite root directory to frontend
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ /frontend/index.html [NC,L,QSA]
# Rewrite non-existent files and folders to frontend
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/frontend/
RewriteRule ^(.*)$ /frontend/$1 [NC,L,QSA]
</IfModule>
其主要未能将CCD_ 17重写为CCD_
我应该如何继续?
这样做:
RewriteEngine on
RewriteBase /
# skip backend/ and other/ directories
RewriteRule ^(?:backend|other)/ - [L,NC]
# forward these known paths to /frontend/
RewriteRule ^(index.html)$ /frontend/$1 [L,NC]
# rewrite an alphanumeric URI that is non-file/dir to /frontend/index.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^w+/?$ /frontend/index.html [L]
# Rewrite non-existent files and folders to frontend
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/frontend/ [NC]
RewriteRule ^(.*)$ /frontend/$1 [L]