apache - .htaccess - 将所有重定向到根文件夹或子文件夹的 index.php

标签 apache .htaccess mod-rewrite

我需要一个 .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 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 的内部工作。

关于apache - .htaccess - 将所有重定向到根文件夹或子文件夹的 index.php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18968263/

相关文章:

html - 如何使用 htaccess 强制使用 http- 而不是 https

apache - .htaccess 规则仅接受列表中的特定值

linux - Netcat进入apache密码保护目录

security - 如何将 html 页面嵌入到 jsp 中,同时避免重复登录并将 html 单独托管到 web 应用程序?

java - 在 Tomcat 服务器上部署 .war 文件后 Birt 图表未显示在 Web 应用程序上

apache - mod_rewrite - 强制重定向到重写的 URL

php - 查询字符串和 Mod 重写

.htaccess - 我怎样才能让我所有的网址都没有扩展名,没有尾部斜杠。并将 .php 和尾部斜杠重定向为无?

apache - 使用 .htaccess [#Q1.] 修改 URL

regex - RewriteRule 不适用于加号(+ 或 *)字符