我正在运行通配符子域。该网站的目的是运行虚拟子域。功能应该是什么时候文件 从主站点调用它们将被重写为干净的URL。但是当我从子域调用相同的文件时 像xyz.doamin.com/my-file.php然后这应该被重写,就像它调用具有subdoamin参数的文件一样 domain.com/my-file.php?var=xyz。目前我为文件调用所做的是这个
Options +FollowSymLinks
RewriteEngine on
## Redirecting all non-www domains to www.domain.com
RewriteCond %{HTTP_HOST} ^domain.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,NC,L]
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ http://www.domain.com%{REQUEST_URI}?var=%1 [L]
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteCond %{QUERY_STRING} !^$
RewriteRule ^(.*)$ http://www.domain.com%{REQUEST_URI}?%{QUERY_STRING}&var=%1 [L]
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ http://www.domain.com/index.php?subdomain=%1 [L]
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteCond %{QUERY_STRING} !^$
RewriteRule ^(.*)$ http://www.domain.com%{REQUEST_URI}?%{QUERY_STRING}&subdomain=%1 [L]
这会给文件调用带来500内部错误。
答案 0 :(得分:0)
规则集4将与规则集1和2重叠。我怀疑这是导致问题的原因。
所以我认为所有3人都需要对RewriteCond
进行额外的REQUEST_URI
检查。
真的你不应该需要规则集4.只需将index.php作为默认值就可以了。除非你当然不想像http://www.domain.com/?var=xyz
这样的网址,在这种情况下你需要规则4,但你需要将它分成2 - 一个QUERY_STRING
而一个没有,就像规则1和2
此外,重写规则本身的正则表达式不是%1
而不是之前的rewriteConds?如果是这样,那么你的正则表达式是错误的,因为它会将var=
设置为整个原始网址。
查看错误日志是一个好主意,因为它会告诉您500错误的原因。
编辑:好的,尝试这样的事情(未经测试)
## Redirecting all non-www domains to www.domain.com
RewriteCond %{HTTP_HOST} ^domain.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L,QSA]
## Redirecting / requests to index.php
# Note: Use the QSA flag for handling with or without query string
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/index.php?var=%1 [L,QSA]
## Redirecting /something requests to index.php
# Note: Use the QSA flag for handling with or without query string
RewriteCond %{REQUEST_URI} ^/.+$
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com%{REQUEST_URI}?var=%1 [L,QSA]