Apache在子目录中重写htaccess

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的重写,没有成功,我错过了什么?将.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]
答案

我想你可以使用一个单独的qazxsw poi文件qazxsw poi,其规则如下:

.htaccess

所以这应该在内部重定向到子文件夹in your API folder

RewriteRule ^$ /public [R=301,L]

UPDATE1

我认为在你的情况下这应该工作

public

它还取决于您使用的系统和预设。

UPDATE2

我在XAMPP上做了一些测试,得到了以下结果

把你的ROOT | --api/ | |-- .htaccess | |-- public/ | |-- index.php |-- backoffice/ 放在RewriteEngine On RewriteBase /api/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^api/(.*)$ /api/public/$1 [L] .htaccess所有其他ROOT folder。如你所愿,将delete重命名为.htaccess files in subfolders或其他东西

api

将此_api添加到root

ROOT
  | --.htaccess
  | --/_api/  <<<------- rename
  |     |-- /public/
  |             |-- index.php
  |-- /backoffice/

像以前一样打电话给.htaccess

这个场景按预期在我的测试系统上运行。试试看。

以上是关于Apache在子目录中重写htaccess的主要内容,如果未能解决你的问题,请参考以下文章

DirectAdmin Apache - .htaccess 重写

从 Apache (.htaccess) 到 IIS 问题的 URL 重写

apache .htaccess 重写 - 我可以把它移到 httpd.conf

.htaccess伪静态(URL重写)绑定域名到子目录实现子站点

虚拟主机.htaccess伪静态(URL重写)建立多站点

如何在 .Htaccess 中禁用/不允许共享主机 RewriteLog 时,在 Apache 2 中模拟和测试 URL 重写规则?