首页 > 解决方案 > .htaccess 如果在最后一个斜杠之前没有扩展名,则添加斜杠

问题描述

我这里有一个代码,它通过在末尾添加斜杠来重写 url。健康)状况:

  1. 没有文件扩展名
  2. 最后没有斜线

RewriteEngine On
RewriteCond %{REQUEST_URI} !\..*$
RewriteRule ^(.*)([^/])$ http://%{HTTP_HOST}/Brian/$1$2/ [L,R=301]

如果网址是:

http://localhost:8080/Brian/test123 -> http://localhost:8080/Brian/test123/ - CORRECT
http://localhost:8080/Brian/test123. -> http://localhost:8080/Brian/test123. - CORRECT
http://localhost:8080/Brian/test123.awd -> http://localhost:8080/Brian/test123.awd - CORRECT

http://localhost:8080/Brian/test123.awd/a -> http://localhost:8080/Brian/test123.awd/a - THIS IS MY PROBLEM

我想做出这样的结果。

http://localhost:8080/Brian/test123.awd/a/

请帮忙。谢谢!

标签: regexapache.htaccessmod-rewrite

解决方案


RewriteCond %{REQUEST_URI} !\..*$

因此,您似乎只需要查看最后一个路径段,而不是URL 路径中的任何位置。(顺便说一下,上面的CondPattern与 相同!\.

例如:

RewriteCond %{REQUEST_URI} !\.[^/]*$

[^/]*匹配除斜杠之外的任何字符到字符串的末尾,因此它只会匹配最后没有后跟斜杠的路径段。


旁白:看起来您的.htaccess文件位于/Brian子目录内。您可以稍微“简化”一下,避免必须在替换中显式声明RewriteRule 子目录。例如:

RewriteCond %{REQUEST_URI} !\.[^/]*$
RewriteRule !/$ %{REQUEST_URI}/ [L,R=301]

RewriteRule 模式 !/$仅检查请求的 URL 路径是否尚未以斜杠结尾(而不是在末尾没有出现斜杠时捕获所有内容)。server 变量包含完整的REQUEST_URI(相对于根的,以斜杠开头)URL 路径,我们已经确定它不以斜杠结尾。

如果您要重定向到相同的方案 + 主机名,则不一定需要将其包含在替换字符串中。


推荐阅读