.htaccess获取子变量

时间:2015-11-14 12:09:05

标签: apache .htaccess mod-rewrite url-rewriting subdomain

我有一个我手动翻译的网站。普通版本为英文,翻译版本为西班牙文。

翻译版本可通过http://example.com/file.php?language=es访问(es esolol) 我希望域名后的网址不会因翻译的变化而改变,所以我尝试使用http://es.example.com/代替。

这是我的htaccess的当前状态:

RewriteCond %{HTTP_HOST} !^example\.site$
RewriteRule home/$ /index.php [L,QSA]
RewriteRule contact-us/$ /contact-us.php [L,QSA]
RewriteRule our-location/$ /our-location.php [L,QSA]
RewriteRule gallery/$ /gallery.php [L,QSA]
RewriteRule (.*)/$ /user.php?display_name=$1 [L,QSA]

RewriteCond %{HTTP_HOST} !^es\.example\.site$
RewriteRule home/$ /index.php?language=es [L,QSA]
RewriteRule contact-us/$ /contact-us.php?language=es [L,QSA]
RewriteRule our-location/$ /our-location.php?language=es [L,QSA]
RewriteRule gallery/$ /gallery.php?language=es [L,QSA]
RewriteRule (.*)/$ /user.php?language=es&display_name=$1 [L,QSA]

!^ example.site $ all下的第一组规则覆盖了!^ es.example.site $下的规则,所以当我访问带有或不带“es”子域的页面时,我得到了英文版无论哪种方式。如果我将子域规则(和重写条件)置于非子域规则之上,则会发生同样的事情,除非该站点仅以西班牙语翻译。

非常感谢任何帮助。

编辑:

固定规则,感谢@ hjpotter92

的帮助
RewriteRule ^home/?$ /index.php [NC,QSA,S=3]
RewriteRule ^(contact-us|our-location|gallery)/?$ /$1.php [NC,QSA,S=2]
RewriteRule ^(?!user\.php).*/$ /user.php?display_name=$0 [NC,QSA]

RewriteCond %{HTTP_HOST} ^es\.example\.site$ [NC]
RewriteCond %{QUERY_STRING} !language=es [NC]
RewriteRule ^.*$ /$0?language=es [L,QSA]

1 个答案:

答案 0 :(得分:1)

您可能正在努力实现这一目标:

RewriteEngine On

RewriteRule ^home/?$ /index.php [NC,QSA,S=3]
RewriteRule ^(contact-us|our-location|gallery)/?$ /$1.php [NC,QSA,S=2]
RewriteRule ^(?!user\.php).*/$ /user.php?display_name=$0 [NC,QSA]

RewriteCond %{HTTP_HOST} ^es\.example\.com$ [NC]
RewriteCond %{QUERY_STRING} !language=es [NC]
RewriteRule ^.*$ /$0?language=es [L,QSA]