【问题标题】:.htaccess send index.html instead status 404.htaccess 发送 index.html 而不是状态 404
【发布时间】:2015-06-01 17:12:39
【问题描述】:

我为 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报错文件如何重调?

【问题讨论】:

    标签: php angularjs apache .htaccess mod-rewrite


    【解决方案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]
    

    【讨论】:

      猜你喜欢
      • 2022-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 2014-12-30
      • 2018-06-28
      • 2018-12-05
      • 1970-01-01
      相关资源
      最近更新 更多