如何配置.htaccess

jrcvhitl  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(132)

如果公用文件夹中的文件不存在,请连接到index.php

  1. /localhost/project/显示index.php
  2. /localhost/project/wrongpath显示/public/index.php
  3. /localhost/project/js/main.js显示/public/js/main.js
htdocs
| project
| | public
| | | index.php
| | | js
| | | | main.js
| | | image
| | | | def.png
| | | css
| | | | main.css
| | | asset
r9f1avp5

r9f1avp51#

因此,基本上,您希望实现前端控制器模式,但public目录对(可见)URL是“隐藏”的。
您应该使用2个.htaccess文件。/project子目录中的第一个只是将所有请求重写到/project/public子目录。第二个在实现前端控制器模式的/project/public子目录中,将请求重写到index.php
例如,第一个.htaccess文件:

# /project/.htaccess

RewriteEngine On

# Rewrite all requests to the public subdirectory
RewriteRule (.*) public/$1 [L]

第二个.htaccess文件:

# /project/public/.htaccess

DirectoryIndex index.php

RewriteEngine On

# Front-controller pattern
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [END]

第二个.htaccess文件在public子目录中的存在也可以防止第一个.htaccess文件将请求重写到子目录时发生重写循环,因为默认情况下不会继承mod_rewrite指令。
请注意,没有任何RewriteBase指令,并且在 substitution 字符串(RewriteRule指令的第二个参数)中使用了 relative URL路径。
在最后一条规则中使用END标志是假设您使用的是Apache 2.4。
使用上述.htaccess文件:
1.对/project/的请求在内部被第一个.htaccess文件重写为/project/public/。mod_dir然后提供该目录的目录索引(index.php)。

  1. /project/wrongpath被第一个.htaccess文件重写为/project/public/wrongpath。mod_rewrite然后服务于/project/public/index.php,因为wrongpath不Map到物理文件或目录。
  2. /project/js/main.js被第一个.htaccess文件重写为/project/public/js/main.js。由于这现在Map到一个物理文件,第一个 * 条件 *(RewriteCond指令)失败,并且没有额外的重写发生。文件直接送达。

相关问题