我在cpanel中设置了一个* .mydomain.com子域名(cpanel,没有shell访问权限) 去任何地方.mydomain.com将我带到我为* .mydomain.com挂载的同一目录
所以当我在.htaccess中使用以下内容转到test.mydomain.com时,
正常运作的是:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.+)\.(.+?\..+?)$ [NC]
RewriteCond %{REQUEST_URI} !^/test/(.+)?$
RewriteRule ^(.*) /%1/$1
什么不起作用并且给出了500错误(刚刚用%1替换了测试):
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.+)\.(.+?\..+?)$ [NC]
RewriteCond %{REQUEST_URI} !^/%1/(.+)?$
RewriteRule ^(.*) /%1/$1
我想要做的是允许动态设置子域,如果存在具有它名称的子目录。当我在.htaccess中对子域名 test 进行硬编码时,重写是优雅的,而不是当我使用backrefrence %1 时。
答案 0 :(得分:2)
您不能在RewriteCond
中使用%变量或反向引用作为正则表达式的一部分。您可以创建一个字符串,用于反向引用和#regex反向引用:
RewriteCond %1:%{REQUEST_URI} !^([^:]+):/\1/(.+)?$
因此,您创建一个由主机匹配的子域组成的字符串,冒号,然后是URI,与正则表达式中的子域匹配,并使用\ 1引用它。
此外,您可能需要立即添加另一个%{HTTP_HOST}
匹配,因为%1反向引用可能已重置,因为您无法反向引用非匹配。