regex - .htaccess 如果在最后一个斜杠之前没有扩展名,则添加斜杠
问题描述
我这里有一个代码,它通过在末尾添加斜杠来重写 url。健康)状况:
- 没有文件扩展名
- 最后没有斜线
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/
请帮忙。谢谢!
解决方案
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 路径,我们已经确定它不以斜杠结尾。
如果您要重定向到相同的方案 + 主机名,则不一定需要将其包含在替换字符串中。
推荐阅读
- flutter - Flutter - 不知道编写 Stream 和 StreamBuilder
- string - 从部件构建 Vector{UInt8} 时减少内存分配
- perforce - Perforce 自动解析总是接受目标
- node.js - tsconfig-path/register 不同的行为
- server - Kaa 服务器数据不可见
- javascript - Object 在 TypeScript 中可能为 null,但在上下文中,object 不能为 null
- python - 将字典列表拆分为多个块
- flutter - 如何用颤振检测文本语言
- python - 黑白配色
- java - 对列表执行某些操作后如何删除列表的最后一个 x 元素?