Apache mod_rewrite 500 内部服务器错误

Apache mod_rewrite 500 内部服务器错误

我正在尝试创建一个动态子域名,但遇到了很大困难,我一直收到 500 内部服务器错误

例如实际域名应该是

http://www.parameterToBePassed.domain.com/

应该指向/重定向

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

答案1

(不久前我回答过类似的帖子,尽管这里的情况略有不同)

假设某人去a.domain.com。这符合两个条件。

主要问题:您的重写规则匹配空输入......

于是,a.domain.com遵守规则就变成a.domain.com/shopping/gatename/

然后它返回到服务器再次,并匹配再次两种情况都满足。URL 变为a.domain.com/shopping/gatename/shoppin/gatename/

你注意到了吗?它用请求的值替换,而不是你在第二个 RewriteCond 中捕获的值,这就是你的另一个问题。

重复使用 捕获的组RewriteCond,但它们前面是%,而不是$。因此,您真正想要的是这个(带有完整的正则表达式元字符等加上锚点):

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 %!

相关内容