我最近将我的 index.php
(处理路由的文件)和 CSS、JavaScript 和字体资源移到了 public/
文件夹中。出于安全目的,我只希望可以访问此 public/
文件夹中的项目。当我意识到我可以访问 mysite.com/composer.lock
并使用我的旧 .htaccess
和文件夹设置查看 Composer 锁文件时,我遇到了这个问题。
这是我想要的
如果我访问 mysite.com/car/create
,我希望它实际指向 mysite.com/public/index.php?path=car/create
如果我链接到诸如 mysite.com/css/style.css
之类的 Assets ,我希望它真正指向 mysite.com/public/css/style.css
这是我的文件夹结构
这是我的 .htaccess
,它根本不起作用
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ public/index.php?path=$1 [L,QSA]
</IfModule>
我该如何解决这个问题?它只是生成空页面,我仍然可以直接访问根目录中的文件等。
最佳答案
您现有的指令专门避免重写对现有文件的请求,因此它仍然可以让您访问根目录中的文件。它还会将静态资源重写为 public/index.php?path=
,这可能会失败。
请尝试以下操作:
RewriteEngine On
# Stop processing if already in the /public directory
RewriteRule ^public/ - [L]
# Static resources if they exist
RewriteCond %{DOCUMENT_ROOT}/public/$1 -f
RewriteRule (.+) public/$1 [L]
# Route all other requests
RewriteRule (.*) public/index.php?path=$1 [L,QSA]
关于php - MVC 公共(public)文件夹 htaccess 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41516541/