.htaccess 将请求发送到子文件夹的 index.php

.htaccess 将请求发送到子文件夹的 index.php

我已经在 StackOverflow 上搜索过我的答案,但似乎没有一个能起到作用。

我有一个将所有请求发送到文件的框架index.php。当我将其安装在虚拟主机的根目录中时,一切正常:

http://example.com/
http://example.com/home
http://example.com/home/index

当我尝试在子目录中安装框架时出现问题,例如:

http://example.com/blog/

请求如下:

http://example.com/blog/home
http://example.com/blog/home/index

所有这些请求都应发送到 /blog 中的 index.php 文件

我当前的设置是:

http://example.com/index.php- 此文件仅打印出“我们位于虚拟主机的根目录中”。框架并未安装在那里。

http://example.com/blog- 效果很好

当我尝试访问时,http://example.com/blog/home我得到的是根index.php文件,而不是框架。我收到消息“我们位于虚拟主机的根目录中”。

我有以下.htaccess文件位于http://example.com/blog/.htaccess

RewriteEngine on

Options Indexes FollowSymLinks -MultiViews

RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

任何帮助是极大的赞赏。

答案1

解决我的问题的答案是:

RewriteEngine On

Options Indexes FollowSymLinks

RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

看起来,多视图正在把它抛在一边。

答案2

RewriteBase /blog

尝试不带正斜杠。

答案3

您测试的请求是否针对目录中实际上不存在的项目?这些行:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

意味着对已存在的文件或目录的任何请求都不会被重写。

答案4

RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

意思是“如果不是 js 或 ico...”转发到index.php

因此,从本质上讲,您的/blog级别.htaccess是说,如果它不是图像或 CSS 文件,则将其重定向到/blog/index.php

相关内容