我正在尝试添加规则以将子域转换为lang参数,仅适用于en
和de
。到目前为止,所有其他规则都正常运行,但如果我尝试访问任何de.xyz
或en.xyz
,我会获得Server not found
。
我认为既然它可以用于消除www。它也应该让我以同样的方式处理子域。我不确定是否必须按照不同的顺序排列它们。
有人可以将我的解决方案与我联系起来吗?
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# redirect www to non www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1
# exclude acp directory
RewriteRule ^(admin)($|/) -
RewriteRule ^sitemap(/?)$ index.php?page=Sitemap
RewriteRule ^imprint(/?)$ index.php?page=Imprint
RewriteRule ^impressum(/?)$ index.php?page=Imprint
RewriteRule ^(.+?)/404(/?)$ index.php?page=Error404
RewriteRule ^([0-9a-z-]+?)/([0-9a-z-]+?)/([0-9a-z-]+?)(/?)$ tutorial-redirect.php?category=$1§ion=$2&chapter=$3
RewriteRule ^([0-9a-z-]+?)/([0-9a-z-]+?)(/?)$ tutorial-redirect.php?category=$1§ion=$2
RewriteRule ^([0-9a-z-]+?)(/?)$ tutorial-redirect.php?category=$1
# redirect en
RewriteCond %{HTTP_HOST} ^en\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1&lang=en
# redirect de
RewriteCond %{HTTP_HOST} ^de\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1&lang=de
</IfModule>
答案 0 :(得分:2)
您可以使用:
# redirect en and de
RewriteCond %{QUERY_STRING} !lang=
RewriteCond %{HTTP_HOST} ^(en|de)\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%2/$1?lang=%1 [QSA,R,L]
或者重写(没有重定向):
RewriteRule ^ %{REQUEST_URI}?lang=%1 [QSA,L]