【问题标题】:htaccess redirect folder to subfolderhtaccess 将文件夹重定向到子文件夹
【发布时间】:2017-12-05 23:34:36
【问题描述】:

注意:我写了解决方案。不管怎样,谢谢你。 :)

我知道这似乎是重复的问题:我搜索了很多,我应用了数十条重写规则,但它们不起作用。

我需要从

重定向
www.domain.com/folder1

www.domain.com/folder1/subfolderA

注意:folder1 是空的。在 subfolderA 我有 index.html、index.php、css 文件、js 文件。如果我转到“www.doman.com/folder1/subfolderA/”,我会看到一个简单的网页,其中包含 index.php 文件提供的正确 css 和 js。

我的 .htaccess 文件位于 www.domain.com/ 中(我尝试将其放入 folder1 但它不起作用,甚至删除了“RewriteBase /”行)。文件权限:0755。

"Option -Indexes","Option +Indexes" 生成错误“Option index not allowed here”,所以我删除了它们。
“Options +FollowSymLinks”生成错误“Option FollowSymLinks not allowed here”,我将其删除。

第一次尝试:无限的 url

RewriteBase /
RewriteRule ^/folder1(/.*)?$ /folder1/subfolderA$1 [L,R]
(rif: https://stackoverflow.com/a/32525136/1315873) ('R' is just for debug)


结果:
www.domain.com/folder1/subfolderA/subfolderA/subfolderA/subfolderA/subfolderA/

第二次尝试:添加停止无限循环的条件:

RewriteBase /
RewriteCond %{HTTP_HOST} !subfolderA [NC]
RewriteRule ^/folder1(/.*)?$ /folder1/subfolderA$1 [L,R]

非常适合http://htaccess.madewithlove.be/,但不适用于我的服务器。 结果:
www.domain.com/folder1/subfolderA/subfolderA/subfolderA/subfolderA/subfolderA(未更改)

第三次尝试:在 'folder1' 之后使用 $

RewriteBase /
RewriteCond %{HTTP_HOST} !subfolderA [NC]
RewriteRule ^/folder1/$ /folder1/subfolderA/ [L,R]

结果:
禁止
日志说:“找不到匹配的 DirectoryIndex (index.html,index.htm,index.php,index.php3,index.phtml,index.shtml,index.wml),并且服务器生成的目录索引被选项指令禁止”

如果我将“index.php”或“index.html”添加到 url,结果是“404 Not found”(实际上是这样)。

我不知道还能做什么。希望得到您的帮助。
这是一个不可能的重定向吗?
谢谢。

【问题讨论】:

    标签: .htaccess


    【解决方案1】:

    我找到了正确的方法:P .htaccess 文件如下所示:

    RewriteBase /
    RewriteCond %{REQUEST_URI} !subfolderA [NC]
    RewriteRule ^/?folder1(/.*)?$ /folder1/subfolderA$1 [L,R]
    

    由于我不会在浏览器中更改 url(必须看到“www.domain.com/folder1/”),我从最后一行删除了“,R”。

    希望对其他人有帮助。

    【讨论】:

    • .htaccess 与前导斜杠不匹配,因此它必须是 RewriteRule ^/?folder1(/.*)?$ /folder1/subfolderA$1 [L] 才能使其在 Apache config 和 .htaccess 中都工作
    【解决方案2】:

    您可以在文件夹 1 中创建一个 index.php 或 index.html 页面,将用户重定向到子文件夹 A

    例如 index.php 可以包含以下代码

                  <?php
                    header("location: subfolderA");
                     ? >
    

    【讨论】:

    • 我想过在php中使用'include',但我认为它不会找到js和css文件(在subfolderA中而不是在folder1中)。如果它不改变浏览器中的 ulr ,那么它是一个比我的更容易的解决方案!谢谢
    • 也许如果我了解您要实现的目标,我可以提供更多帮助,但是根据您的要求,如果将一个重定向到子文件夹A,那么该文件夹中的“index.php”将向客户端显示它的内容,并且该页面肯定可以访问其所有依赖文件
    • 是的,你是对的,包含在这里不起作用。或者,您可以使用 file_get_contents() 从 subfolderA 获取页面,然后执行正则表达式以更改捕获内容中的 url,然后最终将其输出到客户端。这样,您保留浏览器 url 并仍然在 subfolderA 中显示页面
    • 我尝试按照您的建议使用 folder1/index.php 文件。它可以工作,但也要更改浏览器上的 url。所以现在我用我的答案。 :) 谢谢。
    • 使用 file_get_contents 可以作为内联 js/css 的 php/html 的解决方案。不适用于 html 中包含的 js 和 css 文件。
    猜你喜欢
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 2011-06-13
    相关资源
    最近更新 更多