我让应用程序在以下变量链接上运行:
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。