我有一个基于Slim框架的PHP应用程序,在/public
目录和.htacces
文件后面有静态文件:
# URL routing
Options -MultiViews
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f
RewriteRule ^ %{DOCUMENT_ROOT}/public%{REQUEST_URI} [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
当我尝试访问/index.php时,Apache直接返回它,但是我希望它被传递给index.php(它将返回404找不到)。我该怎么办?
如果我尝试删除RewriteCond %{REQUEST_FILENAME} !-f
:
# URL routing
Options -MultiViews
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f
RewriteRule ^ %{DOCUMENT_ROOT}/public%{REQUEST_URI} [L]
RewriteRule ^ index.php [QSA,L]
Apache返回“内部服务器错误”。我怎么能完成它?
Upd:我的项目结构
www/
├── app/
├── cache/
├── public/
│ ├── css/
│ ├── img/
│ └── js/
├── vendor/
├── views/
└── index.php
答案 0 :(得分:1)
你的RewriteRules是一团糟。
RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f
RewriteRule ^ %{DOCUMENT_ROOT}/public%{REQUEST_URI} [L]
你告诉Apache有什么"如果DOCUMENT_ROOT / public%{REQUEST_URI}是一个文件"。但是,在您的设置中,DOCUMENT_ROOT已经是公共/。这是你混乱的根源。
请考虑一下:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /public/$1 [L]
RewriteRule ^$ ./index.php [QSA,L]
Apache已经为你做了文件名翻译,你正在尝试使用DOCUMENT_ROOT进行文件翻译
答案 1 :(得分:-1)
最好的办法是删除.HTACCESS文件或使用
在您的服务器ROOT中编辑它DirectoryIndex public_html www html