全部重定向到index.php htaccess该怎么做?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (40)

我的PHP脚本的功能:抓住请求的URI并将其分解成段。使第1部分为控制器,第2部分为动作。这一切都很好,当我这样做:

http://www.domain.com/mvc/module/test/

它将转到特定的模块控制器和方法。现在我有一个默认控制器,即家庭控制器,它位于归档文件夹中。

现在,当我直接访问这个文件夹 http://www.domain.com/mvc/home/ 它会显示一个403禁止,因为这个文件夹确实存在,相反,它也应该回到 http://www.domain.com /mvc/index.php

如果我将该框架安装在不同的文件夹中,可以说文件夹框架,它必须重定向回http://www.domain.com/framework/index.php

我想将每个文件夹和php文件重定向回index.php,其他所有事情都是这样。

我遇到的第一个问题是它永远不会重定向到正确的文件夹,而是永远都会重定向到域根文件夹。

这是我试过的:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
提问于
用户回答回答于

首先确保你的.htaccess文件在你的文档根目录下(与index.php原来的位置相同),否则它只会影响它所在的​​子文件夹(以及其中的任何子文件夹 - 递归地)。

接下来对您的规则做一些细微的修改,使其看起来像这样:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA]

如果你想把整个shebang安装在一个子目录中,比如/mvc/或者/framework/最简单的方法就是稍微改变重写规则,以便将其考虑在内:

RewriteRule ^(.*)$ /mvc/index.php?path=$1 [NC,L,QSA]

并确保index.php.htaccess文件位于文档根目录时,您位于该文件夹中。

$path变量将包含伪造的目录结构,/mvc/module/test例如,你可以在index.php中使用它来确定您想要执行的Controller和操作。

用户回答回答于

要将不存在的所有内容重定向到index.php,您还可以使用该FallBackResource指令:

FallbackResource /index.php

它的工作原理与ErrorDocument当您在服务器上请求不存在的路径或文件时一样,该指令以无提示方式向请求发送index.php

如果你想将所有(including existant files or folders)重定向到index.php,你可以使用类似下面的东西:

RewriteEngine on

RewriteRule ^((?!index\.php).+)$ /index.php [L]

扫码关注云+社区

领取腾讯云代金券