php - Apache 在子目录中重写 htaccess
问题描述
让我进入正题。
我有一个具有这种结构的 php 项目
ROOT
.htaccess
--api/
----public/
------index.php
------test.html
--backoffice/
我想要的是使用 api/public 的 index.php 让它像
domain.com/api/index.php
代替
domain.com/api/public/index.php
我一直在尝试.htaccess的rewritebase或rewriterules没有成功,我错过了什么?将.htaccess 放在错误的目录中?我必须使用多个.htaccess?
更新:所以我得到了两个 .htaccess 文件,现在我可以使用 url domain.com/api/index.php 进行访问,但它会抛出 401 ,这是……另一方面,我可以访问文件 test.html 位于 /api/public 下,当前 URL 为 domain.com/api/test.html
这是 .htaccess
domain.com/api/ .htaccess 文件
RewriteEngine On
RewriteBase /api/public/
RewriteCond %{REQUEST_URI} !^/api/public/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /api/public/$1
domain.com/api/public/ .htaccess 文件
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
解决方案
我认为您可以使用具有如下规则的单独.htaccess
文件in your API folder
:
RewriteRule ^$ /public [R=301,L]
所以这应该在内部重定向到子文件夹public
ROOT
| --api/
| |-- .htaccess
| |-- public/
| |-- index.php
|-- backoffice/
更新1
我认为在你的情况下这应该有效
RewriteEngine On
RewriteBase /api/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^api/(.*)$ /api/public/$1 [L]
它还取决于您使用的系统和预设。
更新2
我在 XAMPP 上做了一些测试,得到了以下结果
把你.htaccess
的ROOT folder
,
delete
所有其他的.htaccess files in subfolders
。重命名api
为_api
或其他,如你所愿
ROOT
| --.htaccess
| --/_api/ <<<------- rename
| |-- /public/
| |-- index.php
|-- /backoffice/
将此添加.htaccess
到根目录
RewriteEngine On
Options FollowSymLinks
RewriteBase /
DirectoryIndex index.php index.html
RewriteRule ^api2/(.*)$ /api/public/$1 [B,L,QSA]
像以前一样打电话yoursite.com/api
这个场景按预期在我的测试系统上运行。试试看。
推荐阅读
- java - Char 什么时候表现得像 Java 中的 Char 和整数?
- android - 查询sqlite数据库时没有这样的列错误
- python - 缺少日期值
- c - 我正在尝试构建一个并发计数器程序,当线程增加时性能时间会增加
- wcf - DispatchOperation.ParameterInspectors 在 netstandard2.0 中不可用
- tensorflow - 混合 tf.keras.mixed_precision 是否适用于推理?
- python - 此代码是否适合跨多个处理器执行?
- flutter - Flutter - 将包装内容设置为垂直滚动列表视图
- c# - 无法从客户端凭据身份验证 Microsoft AD 授权令牌
- file-upload - IBM Mobilefirst Java HTTP Adapter 中的多部分文件上传