【问题标题】:Htaccess rewrite removes trailing slashesHtaccess 重写删除尾部斜杠
【发布时间】:2016-07-25 07:09:36
【问题描述】:

Htaccess 会以某种方式自动删除 url 末尾的所有尾随斜杠并只保留一个。

例如http://localhost/api/param1///变成http://localhost/api/param1/

你能告诉我为什么会发生这种情况以及如何摆脱这种情况吗? (.*) 应该匹配所有内容吗?但事实并非如此。就像我说的,如果我去http://localhost/api/param1/// $_GET['url'] 应该是param1/// 但它是param1/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

【问题讨论】:

  • -d & -f 重写到目录和文件位置。 param1/ 可以是目录,param1/// 不能是目录。
  • 嗯,所以你是说这不可能?现在我正在使用 $_SERVER["REQUEST_URI"] 变量,它可以完成这项工作,但我想知道是否有更好的解决方案。
  • 虽然您可以通过在RewriteCond 指令中使用REQUEST_URI 变量在.htaccess 中解决此问题,但在PHP 中使用$_SERVER['REQUEST_URI'] 超全局(正如您所做的那样)可以说同样好(或更好) - 可能取决于您的情况。

标签: php .htaccess


【解决方案1】:

Apache 自动将多个斜杠以RewriteRule 模式剥离成一个斜杠。

如果您想捕获多个斜杠,请改用RewriteCond

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/(.*)$
RewriteRule ^ index.php?url=%1 [QSA,L]

【讨论】:

  • 谢谢,这行得通。但是,它匹配整个 URI,而不仅仅是 .htaccess 文件所在的子文件夹中的 URI。但这对我来说是可以接受的。
  • %{REQUEST_URI} 匹配完整的 URI,而不是当前路径的相对路径。
猜你喜欢
  • 2015-01-15
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
相关资源
最近更新 更多