嵌套 .htaccess 中的 mod_rewrites 导致奇怪的 404

嵌套 .htaccess 中的 mod_rewrites 导致奇怪的 404

我有一个 apache HTTP 服务器,其目录结构如下:

/
---- api/
---- ---- index.php
---- ---- .htaccess
---- index.php
---- .htaccess

/.htaccess

DirectorySlash Off
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*[^/])$ $1/

/api/.htaccess

RewriteEngine On

我的目标是在调用时不带反斜杠的情况下显示目录的 index.php。但是,调用http://domain.com/api导致 404。注释掉一行/api/.htaccess使一切按预期工作。

我很难理解这种行为,因为文档为了重写引擎开启对此只字未提。有人能解释一下 mod_rewrite 的工作原理吗?

注意:这个问题最初发布在 SO这里但没有收到任何回复。如果此回复解决了问题,我将关闭此回复。

编辑:根据@Jonah B 的建议,可以创建一个新的重写上下文,我尝试改变规则/api/.htaccess更改为以下内容:

RewriteEngine On
RewriteRule ^ index.php

但结果仍然是一样的——仍然是 404。

答案1

如果你只需要告诉 apache 路由请求

/api

应该在 /api 目录中查找 index.php 文件,使用

DirectoryIndex index.php

不要为重写引擎烦恼。

看:

http://httpd.apache.org/docs/current/mod/mod_dir.html#directoryindex

http://www.htaccess-guide.com/directoryindex-uses/

https://stackoverflow.com/questions/2384423/index-php-not-loading-by-default

相关内容