我正在尝试将所有文件夹(使用通配符)重定向到其子域。例如:
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
答案 0 :(得分: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
,它反向引用到上一个匹配(\w+)
。