1

我正在尝试将我的所有文件夹(使用通配符)重定向到它们的子域。例如:

www.mywebsite.com/folder1 到 folder1.mywebsite.com/
www.mywebsite.com/folder2 到 folder2.mywebsite.com/
www.mywebsite.com/folder3 到 folder3.mywebsite.com/

现在无需为每个人编写规则,有没有办法将它们全部重定向到各自的子域?

我试过了:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.mywebsite\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.mywebsite\.com$
RewriteRule ^(.*)$ /%1/$1 [QSA]

但它给了我一个内部错误 500

4

1 回答 1

2

您需要防止规则循环,使用条件首先检查是否/%1/$1实际存在,或者URI 尚未以%1

所以:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.mywebsite\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.mywebsite\.com$
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/%1%{REQUEST_URI} -d
RewriteRule ^(.*)$ /%1/$1 [QSA]

或者:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.mywebsite\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.mywebsite\.com$
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*):\1
RewriteRule ^(.*)$ /%1/$1 [QSA]

!^/([^/]+)/([^:]*):\1表达式对 URI 中的第一个文件夹进行分组,并使用\1. 如果它们相等,则 URI 中的第一个文件夹%1是反向引用到上一个 match 的(\w+)

于 2012-11-14T05:49:57.533 回答