.htaccess发送index.html而不是状态404

时间:2015-06-01 17:12:40

标签: php angularjs apache .htaccess mod-rewrite

我为api使用angular.js和slim框架。我的目录结构是

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.htmlstatus 200 OK而不是404的内容,因此这样的代码

<script src="/thisFileDoesntExists.js"></script>

将返回index.html的内容。如何为错误的文件重新发送404

1 个答案:

答案 0 :(得分:1)

您的第一条规则是将所有非文件/目录发送到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]