【问题标题】:Apache Redirect in htaccess to subdirectoryhtaccess中的Apache重定向到子目录
【发布时间】:2012-08-10 10:12:20
【问题描述】:

我已经构建了一个内部应用程序,需要在公共文件夹中启动,目录结构如下

myapp/conf
myapp/tmp
myapp/doc
myapp/public
myapp/public/css
myapp/public/js
myapp/public/index.php

如果用户将其安装在 webroot 子目录中,而不是将 myapp/public 设置为 webroot,那么 URL 将是

somehost/myapp/public/index.php

如何使用 /myapp/.htaccess 进行重定向,以便将所有内容转发到 /public/index.php 但也会更改 URL 以包含 /public。

我已经想出如何重定向到公共,但由于我在 /public/ 中进行 URL 重写,我需要 $_SERVER['REQUEST_URL'] 在路径中包含 /public/。

我想阻止访问其他所有内容(/conf 和 /doc 等)

运气好吗?

我尝试了什么:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule (.*) index.php/$1 [R=301,L]
RewriteRule ^$ public [L]
</IfModule>

但这似乎在myapp 之前公开,并且网址看起来像这样:localhost/public/myapp/,而不是我需要localhost/myapp/public/

简单来说,我希望 /whatever/* 的所有 URL 都将 public 附加到 /whatever/public/*。

解决方案需要独立于域名和“myapp”名称。他们可以命名根文件夹(“myapp”),但它总是有一个名为“public”的子目录。

【问题讨论】:

    标签: apache .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    试试

    RewriteEngine On
    RewriteBase /myapp/
    
    RewriteCond %{REQUEST_URI} !/public/
    RewriteRule (.*) public/index.php/$1 [R=301,L]
    RewriteRule ^$ public [L]
    

    主要是您需要将基础更改为您的应用名称。然后规则可以保持不变。需要该条件来防止重定向循环。但是,如果您在 /public/ 中有处理请求的 .htaccess 文件,则可能不需要它。

    【讨论】:

    • 这仅适用于应用程序 myapp(他正在寻找一种适用于所有应用程序的解决方案)
    • 是的,我无法控制他们将称之为“myapp”文件夹的内容。它可以是任何东西。另一个解决方案呢。带上 public 的内容,只限制对我的秘密文件夹 conf/ 和 /doc 等的访问...可能会显示 503。如果他们创建其他文件夹,那么他们可以访问这些文件夹。使用 htaccess 会更容易吗?
    猜你喜欢
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多