我已经在 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
。