【问题标题】:htaccess replace all slash (two and more) by one slashhtaccess 用一个斜线替换所有斜线(两个和更多)
【发布时间】:2021-03-19 13:09:40
【问题描述】:

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

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

这是一组 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]

【问题讨论】:

  • 以下任何答案对您有用吗?

标签: regex apache .htaccess


【解决方案1】:

像这样:(见 cmets inline)

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]

【讨论】:

    【解决方案2】:

    对于您显示的示例,您能否尝试以下操作。我还解决了您的问题中缺少标志的小问题。请确保在测试 URL 之前清除浏览器缓存。

    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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      • 2014-01-11
      相关资源
      最近更新 更多