htaccess在多语言网站上显示主站点而不是子文件夹

时间:2012-02-23 12:56:43

标签: .htaccess multilingual

我正在开发一个支持多语言的网站。 URL的格式为:

https://example.com/gb/en/
https://example.com/fr/fr/

gb指的是国家/地区,en指的是该语言。 .htaccess文件处理这些变量并从文件加载特定于语言的数据。

我正在尝试在子文件夹中复制此网站,并让它与原始网站完全分开工作。

https://example.com/promo/gb/en/
https://example.com/promo/fr/fr/

我的.htaccess文件如下所示:

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,NC,L]

ErrorDocument 404 /404.php

#force https 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://example.com/$1 [R,L]

RewriteRule \.js$ /sprocketize.php [QSA,L,NC]

RewriteRule ^(admin) - [L,NC]
RewriteRule ^(app) - [L,NC]
RewriteRule ^(ws) - [L,NC]
RewriteRule ^(opia) - [L,NC]

RewriteRule ^promo-select(/)?$ /promo-select.php [L,NC]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^(www.)?example\.com$ [NC]
RewriteRule ^([a-z]{2})/(.+)/$ http://%{HTTP_HOST}/$1/$2 [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z]{2})/([a-z]{2})(?:/(.*)|)$ /$1/$3?lang=$2 [NC,QSA,PT]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z]{2})(?:/(.*)|)$ /$2?country=$1 [NC,QSA,PT]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php !-f
RewriteRule ^([^/]+)/(.*)$ /$2?keyword=$1 [NC,QSA,PT]

RewriteCond %{REQUEST_URI} !(\.[^./]+)$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /$1.php [NC,QSA]

我尝试过更改

RewriteRule ^([^/]+)/(.*)$ /$2?keyword=$1 [NC,QSA,PT]

RewriteRule ^promo/([^/]+)/(.*)$ /promo/$2?keyword=$1 [NC,QSA,PT]

等,但它要么加载原始网站,要么显示“找不到页面”错误。我也尝试添加RewriteBase /promo,但它只是加载了主站点。我怀疑我做了一些明显/愚蠢的错误。感谢。

更新

我应该说,子文件夹中的文件与根文件夹相同,包括.htaccess文件。有2个.htaccess个文件,1个在根目录中,1个在子文件夹中。我一直在编辑子文件夹中的那个。

1 个答案:

答案 0 :(得分:1)

重要 使用.htaccess对于在编辑文件后清除浏览器缓存通常很重要。我遇到了一些问题

您是否尝试将网址重写为文件夹?

RewriteEngine On
RewriteBase /promo/

注意尾随'/',我认为这应该位于顶部

我使用它,它适用于我的服务器......

请尝试这个并告诉我们会发生什么: 1.改变

RewriteRule ^promo-select(/)?$ /promo-select.php [L,NC]

为:

RewriteRule ^promo-select(/)?$ promo-select.php [L,NC]

如果以上不起作用,请尝试: 变化

RewriteRule ^promo-select(/)?$ /promo-select.php [L,NC]

为:

RewriteRule ^promo-select(/)?$ /promo/promo-select.php [L,NC]