Apache在/ api请求中的奇怪行为

时间:2015-02-24 07:30:23

标签: apache .htaccess mod-rewrite redirect

请求我的网站的任何资源,如/ profile,/ profile /,/ market(有或没有最终斜杠)和/ api /就可以了,但当我尝试请求/ api(没有最终斜线)时,我得到了301永久移动并重定向到/ api /?_ url = api / api。 / profile和/ api之间的Apache差异以及如何修复此重定向?

我的.htaccess看起来像这样:

RewriteEngine on
RewriteCond %{REQUEST_URI} !\.(css|js|png|jpeg|jpg|svg)$
RewriteRule ^(.*)$ controller.php?_url=$1 [QSA,L]

我正在使用Apache 2.2.27

1 个答案:

答案 0 :(得分:1)

差异很可能是/api/是一个目录,mod_dirmod_rewrite模块中运行上述规则后添加了一个尾部斜杠。您可以通过以下代码来控制此行为:

# turn off auto-trailing slash after a directory
DirectorySlash off
RewriteEngine on

# add a trailing slash to directories
RewriteCond %{DOCUMENT_ROOT}/$1 -d
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,R=302,NE]    

RewriteCond %{REQUEST_URI} !\.(css|js|png|jpeg|jpg|svg)$ [NC]
RewriteRule ^(.*)$ controller.php?_url=$1 [QSA,L]