0

我有一个通配符子域(ServerAlias *.mydomain.com)来捕获所有子域请求并将它们重定向到主页,同时在浏览器中保留“假”URL并将子域(城市名称)作为 URL 参数传递

.htaccess 在子域文件夹中:

<IfModule mod_rewrite.c>
 Options +FollowSymLinks
 RewriteEngine On
 RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.(.*)$ [NC]
 RewriteRule ^(.*)$ http://%2.%3/index.php?city=%1 [P,L]
</IfModule>

问题:每个页面都有一个带有一些链接的菜单(register.php、login.php、contact.php),如果您在一个子域中选择其中任何一个,则请求(city.mydomain.com/login.php) php 例如)被条件/规则捕获

我想我需要添加第二组条件/规则,但经过一些测试后找不到合适的条件。我在已经工作的那个之前添加了这个:

 RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.(.*)$ [NC]
 RewriteCond %{REQUEST_URI} ^/(.*)\.php$ [NC]
 RewriteRule ^(.*)$ http://%2.%3/%4 [P,L]

收到错误:

错误的网关!代理服务器收到来自上游服务器的无效响应。代理服务器无法处理请求 GET /register.php。

原因:DNS 查找失败:

如果您认为这是服务器错误,请联系网站管理员。

错误 502 city.domaim.com

CentOS 5 Parallels 小型企业面板 10.2.0

提前致谢

4

2 回答 2

0

该错误是一个幼稚的错误,我忽略了替换字符串中对 RewriteCond 模式 (%N) 的反向引用,指的是最后一个匹配的。然后,在我原来的规则中,%2、%3 和 %4 没有任何意义

这是 .htaccess 的工作:

<IfModule mod_rewrite.c>
 Options +FollowSymLinks
 RewriteEngine On
 RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.(.*)$ [NC]
 RewriteCond %{REQUEST_URI} ^/(.*)\.php$ [NC]
 RewriteRule ^(.*)$ http://mydomain.com/%1.php [P]
 RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.(.*)$ [NC]
 RewriteRule ^(.*)$ http://%2.%3/index.php?city=%1 [P]
</IfModule>

此外,[P] 标志意味着 [L]

教训:RTFM!:-)

于 2011-08-23T12:16:25.827 回答
0

使用 mod_rewrite 可能会使这变得过于复杂。我建议简单地解析/验证子域(城市)并使用直接 PHP 设置一个常量。例如在 config/init 文件中。最后,您将对子域拥有更大的控制权,尤其是在验证的情况下。

亲吻:)

于 2011-08-23T01:21:16.087 回答