没有尾部斜杠时,RewriteRule导致意外的301

时间:2019-02-18 23:26:27

标签: .htaccess redirect mod-rewrite url-rewriting

我的本​​地服务器的根.htaccess包含以下规则,仅此而已:

RewriteEngine on
RewriteBase /

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.*)$ site/$1

目的是秘密地将所有URL重新“植根”到\site\文件夹,以使该文件夹之外的所有内容都以某种方式变为私有。这里的RewriteCond可以防止循环到site/site/site/site/...

的无限序列中

让我们在服务器上创建一个空的\site\文件夹。
现在,在Web浏览器中,我将导航至boop/boop。两个页面都给了我预期的404,表示在服务器上找不到site/boopsite/boop/。符合预期。

我现在将创建文件\site\boop\index.php
导航到boop/时,新创建的页面将按预期显示。
但是,当我导航到boop ...时,事情变得一团糟:

我的浏览器被明确重定向(301)到site/boop/,这反过来导致服务器在内部重定向到/site/site/boop/,并在404处结束。

(创建一个空的\boop\文件夹足以使此行为发生。index.php只是在这里检查重定向在第一种情况下是否起作用。)

这个301来自哪里?与url中的尾部斜杠有什么关系?
我一直在寻找斜杠的含义,但是我发现所有的资源都说“从技术上讲”毫无意义,仅谈论美学惯例。


我正在使用64位WAMP 3.0.6,Apache 2.4.23和PHP 7.0.10运行本地服务器

0 个答案:

没有答案