服务器和客户端如何处理前导斜杠?

服务器和客户端如何处理前导斜杠?

我正在尝试创建一个 RewriteRule,但它不可靠,我无法弄清楚发生了什么。这是我的规则:

RewriteRule ^docs/(......)/$ index.php?docid=$1 [L]

问题在于前导斜杠,我听说这是一件麻烦事。发生的情况如下;

如果在 URL 末尾包含斜杠,则一切都会按预期进行。但是,如果您不在末尾包含斜杠,则 URL 会变成这样:

http://www.mywebsite.com/docs/abcdef/?docid=abcdef

它在 URL 后面包含 GET 数据。有趣的是,网站仍然按预期运行。这是怎么发生的?根据我制作的重写规则,URL 内部应该如下所示:

http://www.mywebsite.com/index.php?docid=?docid=abcdef

但经过进一步测试,似乎添加的获取数据被完全忽略了。说真的,我试过在问号后写任何东西。没有任何效果影响网站。

如果有人能向我解释发生了什么,我将不胜感激。此外,如果有人能向我展示如何更改重写规则以使重写工作,我将不胜感激。

技术细节:

  • Debian 上的 apache-2.2
  • 在 apache 配置文件中写入的 rewriterule。
  • 没有省略其他重写规则。

答案1

只需将尾随设置/为可选即可?

RewriteRule ^docs/(......)/?$ index.php?docid=$1 [L]

相关内容