Apache VHost 将 /dir/ 重定向到子域

Apache VHost 将 /dir/ 重定向到子域

我让应用程序在以下变量链接上运行:

www.example.com/topics/vardir/show
www.example.com/education/topics/vardir/vardir/show
www.example.com/literacy/topics/vardir/show
www.example.com/literacy/topics/vardir/vardir/show

我必须将它们移至子域:

www.subdomain.example.com/topics/vardir/show
www.subdomain.example.com/education/topics/vardir/vardir/show
www.subdomain.example.com/literacy/topics/vardir/show
www.subdomain.example.com/literacy/topics/vardir/vardir/show

www.example.com该网站现在是一个 Wordpress 网站,运行 Lightsail Bitnami。

我想更新www.example.comvhost 文件带有重写规则,以便访问旧链接的人被重定向到新的子域。

我已经有一条重写规则适用于 ?elem=icon_file969末尾带有变量链接的变量链接,该规则会重定向到子域:

www.domainname.com/education/topics/vardir/vardir/show?elem=icon_file969


 RewriteCond %{QUERY_STRING} (^|&)elem=[^&]+(&|$) [NC]
 RewriteCond %{HTTP_HOST} ^(?:www\.)?domainname\.com$ [NC]
 RewriteRule ^/?[^/]+/[^/]+/[^/]+/[^/]+/show/?$ https://subdomain.domainname.com%{REQUEST
_URI} [R=301,L,NC,NE]

任何帮助,将不胜感激。

答案1

来自注释,vardir是一个可变的目录名称,可以包含字母数字字符和下划线。其他路径段是静止的。由于您想要“重定向”(而不是最初所述的“重写”)到与请求相同的 URL 路径,因此您可以使用单个规则执行此操作。

例如:

RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteCond %{REQUEST_URI} ^/topics/\w+/show$ [OR]
RewriteCond %{REQUEST_URI} ^/education/topics/\w+/\w+/show$ [OR]
RewriteCond %{REQUEST_URI} ^/literacy/topics/\w+(/\w+)?/show$
RewriteRule ^/?((education|literacy)/)?topics/\w+(/\w+)?/show$ https://www.subdomain.example.com%{REQUEST_URI} [R=301,L]

简写字符类与(字母数字混合大小写和下划线)\w相同。[a-zA-Z0-9_]

初始请求中的任何查询字符串均不加改变地传递。

RewriteRule 图案是一个更通用的正则表达式,匹配所有需要重定向的 URL 以及更多不需要重定向的 URL。RewriteCond然后,前面的指令将选择范围缩小到仅应重定向的 URL。

相关内容