如何解决.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} !\..*$
因此,似乎您只需要查看 last 路径段,而不需要查看URL路径中的 anywhere 。 (顺便说一句,上面的 CondPattern 与!\.
相同)
例如:
RewriteCond %{REQUEST_URI} !\.[^/]*$
[^/]*
将除斜杠之外的任何字符都匹配到字符串的末尾,因此它将仅匹配没有斜杠的最后一个路径段。
旁边:看来您的.htaccess
文件位于/Brian
子目录中。您可以对此进行“简化”,而不必在RewriteRule
substitution 中明确声明子目录。例如:
RewriteCond %{REQUEST_URI} !\.[^/]*$
RewriteRule !/$ %{REQUEST_URI}/ [L,R=301]
RewriteRule
模式 !/$
只是检查所请求的URL路径是否尚未以斜杠结尾(而不是捕获在斜杠未出现斜杠时捕获的所有内容)结束)。 REQUEST_URI
服务器变量包含完整的(相对于根,以斜杠开头)URL路径,我们已经确定它不是以斜杠结尾。
如果您要重定向到相同的方案+主机名,则不必在 substitution 字符串中包含此名称。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。