【问题标题】:.htaccess - Redirect all to index.php for root folder or subfolder.htaccess - 将所有根文件夹或子文件夹重定向到 index.php
【发布时间】:2020-11-10 06:01:35
【问题描述】:

我需要一个 .htaccess 文件,无论它是放在根文件夹还是子文件夹中都可以正常工作,无需修改。下面的脚本是我一直试图适应但没有成功的正常脚本。我在htaccess rewrite index.php on root and subfolders 上尝试了该解决方案,但无法正常工作。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

布局

.htaccess
index.php
subfolder1
- .htaccess
- index.php

路由 /blah 应该去 /index.php 并且 /subfolder1/whatever 应该去 /subfolder1/index .php。目前,上述脚本会将/subfolder1/whatever发送到/index.php

[更新]

这也适用于 subfolder1 下的任何路径,例如 /subfolder1/1/2/3/idunno

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    如果您使用的是 Apache 2.2.16 及更高版本,则可以停止使用 mod_rewrite,它虽然非常有用且功能强大,但会变得一团糟。

    在 mod_dir 中引入了一个新指令 FallbackResource,它就是这样做的,如果文件系统没有命中,则重定向到您选择的 uri。只要为配置中的目录指定了AllowOverride Indexes,它就可以在 .htaccess 文件中使用。

    由于 .htaccess 文件是深度优先评估的,因此您只需让每个 .htaccess 文件描述当前目录中的后备资源,子目录 subfolder1 中的资源将优先:

    子文件夹1/.htaccess:

    FallbackResource index.php
    

    .htaccess:

    FallbackResource index.php
    

    它们都是一样的,而且工作得恰到好处。

    这个指令似乎并不为人所知,尽管它已经存在了几年,它的目标正是以一种优雅的方式解决这个问题。

    该设置只有一个限制。在根目录或子文件夹 1 的不存在的子目录中调用 url 将产生子请求递归并随后产生错误 500,因为回退资源是给定目录的本地资源。
    最好的方法是使用绝对 uris(以“/”开头)作为 FallbackResource 的参数,这就是为什么要求本身有点奇怪,并且可能与 Apache 的内部工作不兼容的原因。

    【讨论】:

    • 很好的解决方案,但不适用于我,因为我正在寻找可以在无法添加 mod_dir 的共享主机环境中使用的东西。
    • 为什么这个要求这么奇怪?我想在我的机器上开发一个带有路由器的应用程序,它位于 localhost/~username/appname 中。当我将它推送到 git repo 并将其拉到服务器上时,我不想修改 .htaccess 是否位于根文件夹或子文件夹中。
    • 也许奇怪并不是描述这一点的最佳词,但至少可以说 Apache 在“相对”的方式下工作时遇到了麻烦,特别是因为解析 .htaccess 文件是最耗时的方式之一——此软件处理的请求中的消费操作。简而言之,在 .htaccess 中发生的每个重写操作都会导致 apache 中的子请求往返。无法访问主要的 apache 配置一直被 apache 视为“尽可能避免的事情”。
    猜你喜欢
    • 2012-10-23
    • 2015-10-06
    • 2018-09-30
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    相关资源
    最近更新 更多