htaccess 用一个斜杠替换所有斜杠(两个或更多)

时间:2021-03-19 13:09:40

标签: regex apache .htaccess

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

  • 强制在每个 URL 末尾添加斜杠
  • 用 1 个单斜线替换多余的斜线(2 个及更多)。

这是一组网址及其预期结果:

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]

2 个答案:

答案 0 :(得分:1)

根据您展示的样品,您可以尝试以下操作吗?我也在你的问题中解决了你丢失标志的小问题。请确保在测试您的网址之前清除浏览器缓存。

Options +FollowSymlinks
RewriteEngine On

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

## make slashes to 1 at last or uri, in between slashes will be automatically moved to single slash.
RewriteRule ^([^/]*)(?:/+)$ %{REQUEST_URI}/ [L,R=301]
    
RewriteRule ^(fr|en)/?$ content/index.php?lang=$1 [NC,L]
RewriteRule ^(fr|en)/(registration)(/?)$ content/$2.php?lang=$1 [NC,L]

答案 1 :(得分:1)

像这样:(见内嵌评论)

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]
相关问题