我使用angular.js和slim框架作为api。目录结构是
root/
api/
frontend/
.htaccess
根目录下有.htaccess
文件
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{DOCUMENT_ROOT}/frontend/$1 !-d [NC]
RewriteCond %{DOCUMENT_ROOT}/frontend/$1 !-f [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /frontend/index.html [L]
RewriteCond %{DOCUMENT_ROOT}/frontend/$1 -d [NC,OR]
RewriteCond %{DOCUMENT_ROOT}/frontend/$1 -f
RewriteCond %{REQUEST_URI} !^/frontend/ [NC]
RewriteRule ^(.*)$ /frontend/$1 [L]
它工作正常,但是当我试图获取不存在的文件时,apache返回index.html
和status 200 OK
的内容,而不是404
,所以代码如下
<script src="/thisFileDoesntExists.js"></script>
将返回index.html
的内容。如何返回404
错误的文件?
你的第一条规则是罪魁祸首,它将所有非文件/目录发送到index.html
。删除它,并在顶部添加DirectoryIndex
:
DirectoryIndex index.html
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{DOCUMENT_ROOT}/frontend/$1 -d [NC,OR]
RewriteCond %{DOCUMENT_ROOT}/frontend/$1 -f [NC]
RewriteRule ^((?!frontend/).*)$ frontend/$1 [L]