首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache重写特定情况的规则

Apache重写特定情况的规则
EN

Stack Overflow用户
提问于 2022-05-31 11:10:12
回答 1查看 73关注 0票数 1

我有一个.htaccess文件和几个重定向规则。

例如:

代码语言:javascript
复制
RewriteRule ^blog/migrations/?$ / [R=301,L,NE]
RewriteRule ^blog/digital/?$ / [R=301,L,NE]

基本上,我所有的博客url都被删除了,但我发现每个blog url都有重定向规则,可以重定向到主页。但我希望这是一条规则,就像这样:

代码语言:javascript
复制
RewriteRule ^blog/{anyUrl}/?$ / [R=301,L,NE]

我也有奇怪的重定向,例如:

代码语言:javascript
复制
RewriteRule ^2/?$ / [R=301,L,NE]
RewriteRule ^3/?$ / [R=301,L,NE]
RewriteRule ^4/?$ / [R=301,L,NE]
RewriteRule ^5/?$ / [R=301,L,NE]
RewriteRule ^6/?$ / [R=301,L,NE]

我希望它们成为一条规则,例如:

代码语言:javascript
复制
RewriteRule ^{[2-6]}/?$ / [R=301,L,NE]

有人能帮上忙吗,我真的不太擅长正则表达式。

//编辑

此外,我还有一个使用查询字符串重定向urls的规则:

代码语言:javascript
复制
RewriteCond %{QUERY_STRING} .
RewriteRule ^(.*)/?$ /$1 [QSD,R=301,L]

但此规则移除所有查询字符串。如何从规则中排除以utm_开头的特定查询字符串

我怎样才能得到域名呢?我的网站在两个不同的领域。例如:

代码语言:javascript
复制
RewriteRule ^posts/? https://{domain}/somewhere
EN

回答 1

Stack Overflow用户

发布于 2022-05-31 11:12:23

您可以使用regex交替将所有这些规则组合成一个规则:

代码语言:javascript
复制
RewriteRule ^(blog/|[2-6]/?$) https://%{HTTP_HOST}/ [R=301,L,NC]

此模式^(blog/|[2-6]/?$)将匹配起始位置,然后匹配blog/[2-6],然后匹配可选的/和end位置。

对于其他查询字符串规则,可以使用:

代码语言:javascript
复制
RewriteCond %{QUERY_STRING} .
RewriteCond %{QUERY_STRING} !(^|&)utm_ [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSD,R=301,L,NE]

代码语言:javascript
复制
RewriteRule ^posts/? https://{domain}/somewhere

您不需要在重定向规则中使用https://%{HTTP_HOST}使其与请求中的域相同,因此可以:

代码语言:javascript
复制
RewriteRule ^posts/? https://%{HTTP_HOST}/somewhere [L,R]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72446721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档