首页 > 解决方案 > htaccess 用一个斜线替换所有斜线(两个和更多)

问题描述

我想修改一个 .htaccess 文件来做两件事:

这是一组 URL 及其预期结果:

https://www.mywebsite.io/fr > https://www.mywebsite.io/fr/
https://www.mywebsite.io/fr/register > https://www.mywebsite.io/fr/register/
https://www.mywebsite.io/fr/register// > https://www.mywebsite.io/fr/register/
https://www.mywebsite.io/fr////register > https://www.mywebsite.io/fr/register/
https://www.mywebsite.io/fr/register///other////// > https://www.mywebsite.io/fr/register/other/

我设法做了第一步,即强制使用最终的 /,但我无法替换额外的 /。

你能帮我解决这个问题吗?

这是我的 .htaccess 文件的内容

Options +FollowSymlinks
RewriteEngine On

## Force HTTPS
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}/$1 [L,R]

## Force slash
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [L,R]

## Remove repeated slashs
#RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$ [N]
#RewriteRule (.*) %1 [R,L]

RewriteRule (.*)/{2,}(.*) $1/$2 [N]


RewriteRule ^(fr|en){1}(/?)$ content/index.php?lang=$1 [L]
RewriteRule ^(fr|en){1}(/){1}(registration){1}(/?)$ content/registration.php?lang=$1 [L]

标签: regexapache.htaccess

解决方案


像这样:(见内联评论)

Options +FollowSymlinks
RewriteEngine On

## add https and trailing slash in same rule
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^(.*?)/?$ https://%{HTTP_HOST}/$1/ [R=301,L,NE]

## Remove repeated slashs
RewriteCond %{THE_REQUEST} \s[^?]*//
RewriteRule ^.*$ /$0 [R=301,L,NE]

RewriteRule ^(fr|en)/?$ content/index.php?lang=$1 [L,QSA]
RewriteRule ^(fr|en)/registration/?$ content/registration.php?lang=$1 [L,QSA]

推荐阅读