我有一个 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