使用htaccess将默认语言参数重定向到root

问题描述 投票:0回答:1

我一直在寻找解决方案,但只找到一个类似的案例,没有答案(不幸的是)。尽管实施正在发挥作用,但我仍然缺少一个关键方面。

我正在运行一个简单的网站(一个 php 文件),它根据所选的语言和页面加载内容。为了拥有 SEO 友好的 URL,我使用以下 .htaccess 文件:

RewriteEngine On
Options +FollowSymlinks

# 1. Redirect HTTP to HTTPS automatically (only if not in localhost)
RewriteCond %{HTTP_HOST} !=localhost
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# 2. Add a slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^./]+)$ $1/

# 3. Default homepage
RewriteRule ^([^./]+)/$ index.php?lang=$1&page=home

# 4. Language and page
RewriteRule ^([^./]+)/([^./]+)/$ index.php?lang=$1&page=$2

结果:

index.php?lang=en&page=services -> /en/services/
index.php?lang=nl&page=diensten -> /nl/diensten/
...

但是,我希望英语没有语言子目录,而其他语言则保留语言子目录。

index.php?lang=en&page=services -> /services/
index.php?lang=en&page=about -> /about/
...

我可以使用“RedirectMatch 301 /en/(.*) /$1”,但这不是正确的方法。

我如何完成我需要的事情?

php .htaccess
1个回答
0
投票

像这样:

RewriteEngine On
Options +FollowSymlinks

# 1. Redirect HTTP to HTTPS automatically (only if not in localhost)
RewriteCond %{HTTP_HOST} !=localhost
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

# 2. Add a slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^./]+)$ $1/

# 3. Default homepage
RewriteRule ^/?$ index.php?lang=en&page=$1 [L,QSA]

# 4. default language to en
RewriteRule ^([^./]+)/$ index.php?lang=en&page=$1 [L,QSA]

# 5. Language and page
RewriteRule ^([^./]+)/([^./]+)/$ index.php?lang=$1&page=$2 [L,QSA]
© www.soinside.com 2019 - 2024. All rights reserved.