htaccess重写单个+多个URL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了htaccess重写单个+多个URL相关的知识,希望对你有一定的参考价值。

我需要从一个域到另一个域进行一些重定向:一些特定的重定向+一般规则:

具体重定向:

subdomain.example.com/ => example.com/subdomain/
subdomain.example.com/page1 => example.com/subdomain/page1

一般规则 - 应适用于未使用上述规则捕获的所有网址:

subdomain.example.com/* => example.com/*

以下是我现有的规则 - 问题是它们似乎是相互排斥的:

RewriteCond %{HTTP_HOST}  ^subdomain\.example\.com [NC]
RewriteRule /?   http://example.com/subdomain/ [R=301,L]

RewriteCond %{HTTP_HOST}  ^subdomain\.example\.com [NC]
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule ^(.*)$   http://example.com/$1 [R=301,L]

我究竟做错了什么

答案

你有不正确的RewriteRule模式,你应该用/?包含^/?$,否则它匹配所有的URL。

^:开始行

$:行尾

# first specific rule
RewriteCond %{HTTP_HOST}  ^subdomain\.example\.com [NC]
RewriteRule ^/?$   http://example.com/subdomain/ [R=301,L]

# second specific rule
RewriteCond %{HTTP_HOST}  ^subdomain\.example\.com [NC]
RewriteRule ^page1$   http://example.com/subdomain/page1 [R=301,L]

以上是关于htaccess重写单个+多个URL的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess - 根据 URL slug 检查是不是存在多个文件并相应地重写?

使用.htaccess重写具有多个参数的URL

需要在 .htaccess 重写规则中转义 # (hash/pound) 字符

虚拟主机.htaccess伪静态(URL重写)建立多站点

.htaccess伪静态(URL重写)绑定域名到子目录实现子站点

如何为多个子目录制定htaccess重写规则