您需要添加一个条件来打破无限循环。
请注意,只有在您确实希望保持主机名不变时才会出现此循环,因此在同一主机内重写,但仍按照您的建议进行外部重定向。这有点令人惊讶,但肯定有可能:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} ^/subdomain/ [NC]
RewriteRule ^(.*)$ subdomain/$1 [L,R=301,QSA]
这实现了一个外部重定向,需要额外的条件来防止重定向循环:
https://subdomain.example.com/foo > https://subdomain.example.com/subdomain/foo
如果你重写到另一个主机名,不会出现同样的循环:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/subdomain/$1 [L,R=301,QSA]
这实现了一个外部重定向,需要no附加条件,因为现有的已经阻止了重定向循环:
https://subdomain.example.com/foo > https://www.example.com/subdomain/foo
一种更常见的方法是仅在内部重写,因此无需实际更改浏览器中可见的 URL:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} ^/subdomain/ [NC]
RewriteRule ^(.*)$ subdomain/$1 [L,QSA]
这实现了一个内部重定向,所以客户端中的可见 URL保持不变:
https://subdomain.example.com/foo > /subdomain/foo