.htaccess - 将所有内容重定向到index.php以获取根文件夹或子文件夹

时间:2013-09-23 20:29:37

标签: 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 / 应该转到 / subfolder1 / index .PHP 。目前,上述脚本会将 / subfolder1 / whatever 发送到 /index.php

[更新]

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

2 个答案:

答案 0 :(得分:0)

必须说这是一个很奇怪的要求,但这里是:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !/index\.php [NC]
RewriteRule ^(.+?)(/[^/]*|)$ $1/index.php$2 [L]

答案 1 :(得分:0)

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

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

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

subfolder1 / htaccess的:

FallbackResource index.php

htaccess的:

FallbackResource index.php

他们都是一样的,并且工作正常。

这条指令似乎还不为人所熟知,即使它已经存在了几年,它的目标正是以优雅的方式解决这个问题。

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