Regex drupal multisite htaccess:在一个子网站上将所有语言重写为默认语言
我有一个Drupal6多站点,有两个域(www.example.com和www.domain.com),共享一些公共内容Regex drupal multisite htaccess:在一个子网站上将所有语言重写为默认语言,regex,apache,drupal,.htaccess,mod-rewrite,Regex,Apache,Drupal,.htaccess,Mod Rewrite,我有一个Drupal6多站点,有两个域(www.example.com和www.domain.com),共享一些公共内容 域名example.com有三种语言(EN、FR、NL)。语言由路径前缀(/en、/fr、/nl)设置。另一个domain.com仅使用一种语言(NL) 问题:在许多情况下,domain.com以错误的语言显示,即使没有填写路径前缀。不知何故,它似乎默认为EN,尽管它并不总是这样做——行为似乎不太一致 解决方案(至少我希望如此):由于我不是Drupal开发人员(我从一位前同事
需要重写为www.domain.com/fr/some title
www.domain.com/nl/some title
需要重写为www.domain.com/node/1975
www.domain.com/nl/node/1975
# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
我尝试添加以下内容:
RewriteCond %{HTTP_HOST} ^(www.)?domain.com$ [NC]
RewriteRule ^/(.*)$ /nl/$1
并且希望这只是将/nl/前置到所有路径(因此不是完整的解决方案,因为/fr/some title
将变成/nl/fr/some title
)-但是,快速测试表明:
被重写为/fr/some title
(这是我需要的,但不是我期望的)/nl/some title
未重写/某些标题
- 问题:有什么想法可能是错的吗?或者这可能是由其他(Drupal)设置引起的?还是有更好的方法来解决我的问题
- 为了完整起见:live网站
/
总是被去掉,所以理论上它永远不会匹配任何请求
如果您希望对那些未指定语言的请求强制使用默认语言NL,请在现有规则之前,将以下规则添加到.htaccess文件的顶部
#if request is for existing file or directory
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
#then stop processing
RewriteRule .* - [L]
#replace fr with nl. This rule
RewriteRule ^fr/(.*)$ /nl/$1 [L,R=301]
#if the request does not have a language of en or nl
RewriteCond %{REQUEST_URI} !^/(en|nl)/ [NC]
#redirect with nl as default language
RewriteRule .+ /nl%{REQUEST_URI} [L,R=301]
如果不想重定向,只需删除R=301
我编辑了上面的代码,将/fr/some title
替换为/nl/some title/
。
L标志告诉mod_rewrite停止处理进一步的规则,这通常是您想要的,除非您有另一个规则需要进一步处理当前请求。如果此规则
#redirect /fr/* and /en/* to /*
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC]
RewriteRule ^(en|fr)/(.*)$ /$2 [R,L]
#internally rewrite /* to /nl/*
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC]
RewriteCond $1 !^nl/$ [NC]
RewriteRule ^(.*)$ /nl/$1
#drupal code
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
重写规则^/(.*)$/nl/$1
是在你的.htaccess文件中,我很惊讶它的工作原理是前面的/
总是被去掉,所以理论上它永远不会匹配任何请求
如果您希望对那些未指定语言的请求强制使用默认语言NL,请在现有规则之前,将以下规则添加到.htaccess文件的顶部
#if request is for existing file or directory
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
#then stop processing
RewriteRule .* - [L]
#replace fr with nl. This rule
RewriteRule ^fr/(.*)$ /nl/$1 [L,R=301]
#if the request does not have a language of en or nl
RewriteCond %{REQUEST_URI} !^/(en|nl)/ [NC]
#redirect with nl as default language
RewriteRule .+ /nl%{REQUEST_URI} [L,R=301]
如果不想重定向,只需删除R=301
我编辑了上面的代码,将/fr/some title
替换为/nl/some title/
。
L标志告诉mod_rewrite停止处理进一步的规则,这通常是您想要的,除非您有另一个规则需要进一步处理当前请求。在admin/settings/language中,您可以设置默认语言。虽然我不知道这在多站点上是如何工作的。你检查过这个了吗?我想你在其他规则之前加入了你的规则?(L表示以后不会执行其他重写规则)@lumbric 1)/nl设置为默认值。2) 是的,重写规则在以L结尾的重写规则之前。3)我不明白你的第二条评论:-/Hmm,Drupal honor
不接受语言吗<代码>/fr/某些标题
是否正确重写为/nl/某些标题
?但是在你说它将成为/nl/fr/某个标题之前
?@lumbric抱歉,我的不好-我知道现在那部分有点不清楚,我重新措辞了一点…在admin/settings/language中,你可以设置默认语言。虽然我不知道这在多站点上是如何工作的。你检查过这个了吗?我想你在其他规则之前加入了你的规则?(L表示以后不会执行其他重写规则)@lumbric 1)/nl设置为默认值。2) 是的,重写规则在以L结尾的重写规则之前。3)我不明白你的第二条评论:-/Hmm,Drupal honor不接受语言吗<代码>/fr/某些标题
是否正确重写为/nl/某些标题
?但在你说它将成为/nl/fr/某个标题之前
?@lumbric抱歉,我的错-我知道现在那部分有点不清楚,我重新措辞了一点…谢谢你的建议。但是,我有一些问题:1)它似乎缺少一个元素:/fr/某些标题也应重写为/nl/某些标题/2)如何将其集成到现有的重写规则中?我听说L表示“上次重写规则”,而你的建议也包含此标志?再次感谢,+1。但我仍然缺少一些元素(比如如何与现有index.php重写规则集成)。然而,我测试了一些额外的东西,看起来事情更复杂了——即使没有重写规则,一些页面也会重定向到/nl,而其他页面则不会。我不能在这上面浪费太多时间,所以我想我最好的办法是找一个Drupal开发人员来看看……谢谢你的建议。然而,我有一些问题:1)我
#redirect /fr/* and /en/* to /*
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC]
RewriteRule ^(en|fr)/(.*)$ /$2 [R,L]
#internally rewrite /* to /nl/*
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC]
RewriteCond $1 !^nl/$ [NC]
RewriteRule ^(.*)$ /nl/$1
#drupal code
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]