【发布时间】:2022-09-23 16:28:16
【问题描述】:
这里的目标是如果 URL 有一个尾部斜杠,例如 h2tps://domain.com/page/,则重定向到 h2tps://domain.com/page
h2tp(s)://(www.)domaine.com/page/ => h2tps://domain.com/page
它应该只在 prod 环境中工作,而不是在 dev 环境中,这就是为什么这个条件必须只适用于 domain.com。 domain.com 被设置为一个变量,以便在更复杂的环境中进行简单的配置。
实际上,这是我的 .htaccess :
RewriteEngine on
RewriteBase /
RewriteRule .* - [E=DOMAIN:domain.com]
# Remove ending / AND rewrite with https and without www in a single redirection
RewriteCond expr \"%{HTTP_HOST} -strmatch \'(www\\.)?%{ENV:DOMAIN}\'\" [NC]
RewriteCond %{REQUEST_URI} /public/(.+)/$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) https://%{ENV:DOMAIN}/%1 [R=301,L]
我试过在表达式中使用 -strmatch 和 = 。事实是 h2tps://domain.com/page/ 重定向,而不是 h2tps://www.domain.om/page/,好像是可选的 (www.)?被忽略了。
我需要这方面的帮助!
-
-strmatch不进行正则表达式匹配,它是字符串匹配,支持一些通配符(*、?、[] - 但与正则表达式中的含义不同。) -
您的
.htaccess文件在哪里?您在第二个中引用了/public/...URL-path(健康)状况,但这在您的示例 URL 中不存在? (您是否可能将来自父目录的请求重写为/public?)上述规则不会重定向任何内容 - 如果您看到重定向,那么这很可能是缓存重定向(301 - 永久 - 重定向被永久缓存由浏览器和可能的中间缓存)。 -
public/ 没问题,它是实际 .htaccess 的位置(根网站中还有一个重定向到 public/ 的位置。我找到了解决方案,我会在几个小时后发布。谢谢!
标签: regex .htaccess mod-rewrite environment-variables expr