1

我在 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 中硬编码子域名测试时,重写是优雅地完成的,而不是当我为其使用反向引用%1时。

4

1 回答 1

2

您不能使用 % 变量或反向引用作为RewriteCond. 您可以使用反向引用和 # regex 反向引用创建一个字符串:

 RewriteCond %1:%{REQUEST_URI} !^([^:]+):/\1/(.+)?$

因此,您创建了一个由主机匹配的子域、冒号、然后是 URI 组成的字符串,与正则表达式中的子域匹配,并使用 \1 引用它。

此外,您可能需要立即添加另一个%{HTTP_HOST}匹配项,因为 %1 反向引用可能已被重置,因为您无法反向引用匹配项。

于 2012-08-18T19:50:24.953 回答