我正在尝试创build一个dynamic的子域,我有很大的困难,我不断收到500内部服务器错误
所以例如,实际的领域应该是
http://www.parameterToBePassed.domain.com/
应该指向/redirect
http://www.domain.com/shopping/gatename/parameterToBePassed
但是当我访问这个URL时,我得到一个内部服务器错误(500),有什么想法?
vhost.conf成立
ServerAlias www.domain.com domain.com *.domain.com <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} !www.domain.com$ [NC] RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).domain.com [NC] RewriteRule (.*) http://www.domain.com/shopping/gatename/$1 [L] </IfModule>
我正在使用Redhat Linux,使用Plesk
(我这样回答不久前的这个post,虽然这里情况有点不同)
说有人去a.domain.com 。 这符合两个条件。
主要问题:您的重写规则匹配一个空的input…
所以, a.domain.com通过规则,并成为a.domain.com/shopping/gatename/ 。
然后再次返回到服务器,并再次匹配这两个条件。 该url变成a.domain.com/shopping/gatename/shoppin/gatename/ 。
你注意到了吗? 它用请求的值代替,而不是你在第二个RewriteCond中捕获的东西,这就是你的另一个问题。
您可以重复使用RewriteCond捕获的组,但它们以% ,而不是$ RewriteCond 。 因此,你真正想要的是什么(具有完整的正则expression式元字符等加锚):
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] # Non capturing group for "www." if present: it is of no interest RewriteCond %{HTTP_HOST} ^(?:www\.)([a-z0-9-]+)\.domain\.com$ [NC] RewriteRule (.*) http://www.domain.com/shopping/gatename/%1/$1 [L] # Note the %!