如果公用文件夹中的文件不存在,请连接到index.php
。
/localhost/project/
显示index.php
/localhost/project/wrongpath
显示/public/index.php
/localhost/project/js/main.js
显示/public/js/main.js
htdocs
| project
| | public
| | | index.php
| | | js
| | | | main.js
| | | image
| | | | def.png
| | | css
| | | | main.css
| | | asset
1条答案
按热度按时间r9f1avp51#
因此,基本上,您希望实现前端控制器模式,但
public
目录对(可见)URL是“隐藏”的。您应该使用2个
.htaccess
文件。/project
子目录中的第一个只是将所有请求重写到/project/public
子目录。第二个在实现前端控制器模式的/project/public
子目录中,将请求重写到index.php
。例如,第一个
.htaccess
文件:第二个
.htaccess
文件:第二个
.htaccess
文件在public
子目录中的存在也可以防止第一个.htaccess
文件将请求重写到子目录时发生重写循环,因为默认情况下不会继承mod_rewrite指令。请注意,没有任何
RewriteBase
指令,并且在 substitution 字符串(RewriteRule
指令的第二个参数)中使用了 relative URL路径。在最后一条规则中使用
END
标志是假设您使用的是Apache 2.4。使用上述
.htaccess
文件:1.对
/project/
的请求在内部被第一个.htaccess
文件重写为/project/public/
。mod_dir然后提供该目录的目录索引(index.php
)。/project/wrongpath
被第一个.htaccess
文件重写为/project/public/wrongpath
。mod_rewrite然后服务于/project/public/index.php
,因为wrongpath
不Map到物理文件或目录。/project/js/main.js
被第一个.htaccess
文件重写为/project/public/js/main.js
。由于这现在Map到一个物理文件,第一个 * 条件 *(RewriteCond
指令)失败,并且没有额外的重写发生。文件直接送达。