【问题标题】:Apache Rewrite htaccess in subdirApache 在子目录中重写 htaccess
【发布时间】:2018-06-02 18:03:31
【问题描述】:

让我进入正题。

我有一个具有这种结构的 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 ,这是什么.. . 另一方面,我可以使用当前 url domain.com/api/test.html 访问位于 /api/public 下的文件 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]

【问题讨论】:

    标签: php apache .htaccess mod-rewrite


    【解决方案1】:

    我认为您可以使用单独的 .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 folderdelete 所有其他 .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

    此方案按预期在我的测试系统上运行。试试看吧。

    【讨论】:

    • 该规则会将我的网址重定向到 domain.com/public 我编辑了我的问题,如果你可以看看
    • 你能提供一些关于你正在测试的环境的信息吗?当你调用一个没有索引文件的文件夹时,它会自动重定向,没有htaccess文件吗?
    • @lfelisiak 试试 Update2。
    • 当调用没有索引的文件夹时,错误是禁止的(因为禁用了索引选项)我尝试了 Update2,但我得到了 404 未找到。
    • 可能是托管服务提供商的一些配置?我应该与他们联系并询问吗?
    猜你喜欢
    • 2019-05-28
    • 1970-01-01
    • 2015-06-28
    • 2012-05-06
    • 1970-01-01
    • 2015-08-04
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多