如何通过 htaccess 和子域配置多种语言作为 GET 方法?
How to configure multiple languages via htaccess and sub domains as a GET method?
我想将我的网站设计为具有多种语言,我需要将其实现为子域。
例如:
https://www.example.com/
https://fa.example.com/
https://en.example.com/
所以当我搜索并发现有不同的选项时。
- 我应该在不同的子域中复制我的网站并更改它的语言。
- 使用 Url 通过 htaccess 重写来更改语言。
请指导我哪个更好。
如果我想使用第二个选项,我该如何在 htaccess 中编写它。
请注意,在第二个选项中我需要这种重写:
For example:
https://en.example.com/
will be :
https://www.example.com/?lang=en
或
https://en.example.com/login/
will be:
https://www.example.com/login/?lang=en
或
https://en.example.com/login/example.php?a=123
will be:
https://www.example.com/login/example.php?a=123&lang=en
所有其他网址也会像这样更改。
PS:
我的网站只能通过以下代码在 https 上访问:
RewriteEngine On
Options +SymLinksIfOwnerMatch
RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
rewritecond %{http_host} ^example.com [nc]
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$
rewriterule ^(.*)$ https://www.example.com/ [r=301,nc]
感谢您的帮助
在多个目录中复制整个网站不是一个好主意,因为您必须在多个位置维护和修改文件。
翻译域名的语言前缀作为lang
参数应该是首选。
您可以创建通配符 VirtualDomain
并将所有子域指向相同的 DirectoryRoot
。然后你可以在站点根目录 .htaccess 中有以下规则:
Options +SymLinksIfOwnerMatch
RewriteEngine On
# http => https
RewriteCond %{SERVER_PORT} 80
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
# add www to main domain
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L,NE]
# language subdomains handler
RewriteCond %{QUERY_STRING} !(?:^|&)lang= [NC]
RewriteCond %{HTTP_HOST} ^([a-z]{2})\.
RewriteRule ^ %{REQUEST_URI}?lang=%1 [QSA,L]
我想将我的网站设计为具有多种语言,我需要将其实现为子域。 例如:
https://www.example.com/
https://fa.example.com/
https://en.example.com/
所以当我搜索并发现有不同的选项时。
- 我应该在不同的子域中复制我的网站并更改它的语言。
- 使用 Url 通过 htaccess 重写来更改语言。
请指导我哪个更好。
如果我想使用第二个选项,我该如何在 htaccess 中编写它。
请注意,在第二个选项中我需要这种重写:
For example:
https://en.example.com/
will be :
https://www.example.com/?lang=en
或
https://en.example.com/login/
will be:
https://www.example.com/login/?lang=en
或
https://en.example.com/login/example.php?a=123
will be:
https://www.example.com/login/example.php?a=123&lang=en
所有其他网址也会像这样更改。
PS: 我的网站只能通过以下代码在 https 上访问:
RewriteEngine On
Options +SymLinksIfOwnerMatch
RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
rewritecond %{http_host} ^example.com [nc]
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$
rewriterule ^(.*)$ https://www.example.com/ [r=301,nc]
感谢您的帮助
在多个目录中复制整个网站不是一个好主意,因为您必须在多个位置维护和修改文件。
翻译域名的语言前缀作为lang
参数应该是首选。
您可以创建通配符 VirtualDomain
并将所有子域指向相同的 DirectoryRoot
。然后你可以在站点根目录 .htaccess 中有以下规则:
Options +SymLinksIfOwnerMatch
RewriteEngine On
# http => https
RewriteCond %{SERVER_PORT} 80
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
# add www to main domain
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L,NE]
# language subdomains handler
RewriteCond %{QUERY_STRING} !(?:^|&)lang= [NC]
RewriteCond %{HTTP_HOST} ^([a-z]{2})\.
RewriteRule ^ %{REQUEST_URI}?lang=%1 [QSA,L]