Apache Redirect // to no //

时间:2017-12-04 17:01:33

标签: apache .htaccess redirect

电子邮件发出了错误的链接(https://www.digitalmarketer.com/digital-marketing/content-marketing-strategy//),我们需要将//重定向到(https://www.digitalmarketer.com/digital-marketing/content-marketing-strategy/),但无论我尝试什么,重定向都无效。

他们还希望将其重定向到开头总是https:///www,并且最后永远不会有index.html,所以我已经在.htaccess文件中了:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteRule ^content\-marketing\-strategy/index\.html$ /digital-marketing/content-marketing-strategy/? [L,R=301]

我尝试添加新的RewriteRule,但这不起作用:

RewriteRule ^content\-marketing\-strategy//$ /digital-marketing/content-marketing-strategy/? [L,R=301]

我是Apache的新手并重定向,所以非常感谢任何帮助!谢谢!

编辑:值得注意的是,这是在数字营销文件夹(https://www.digitalmarketer.com/digital-marketing/.htaccess)内的.htaccess文件中,所以上述所有规则都只适用于数字营销文件夹。

3 个答案:

答案 0 :(得分:1)

您可以在其他规则的末尾使用插入规则将多个//删除为/

RewriteCond %{THE_REQUEST} //
RewriteRule ^.*$ /digital-marketing/$0 [R=301,L,NE]

Apache自动将多个//拆分为RewriteRule模式内的一个$0,因此捕获的值//会将所有/转换为#DATA set.seed(1) x = sample(c(1, -1), 20, TRUE) * sample(1:20, 20, TRUE) x # [1] 19 5 -14 -3 6 -8 -1 -8 -18 7 10 12 -10 4 -17 14 -16 -3 15 -9 sapply(split(x, with(rle(x > 0), rep(1:length(values), lengths))), sum) # 1 2 3 4 5 6 7 8 9 10 11 12 # 24 -17 6 -35 29 -10 4 -17 14 -19 15 -9

答案 1 :(得分:0)

您可以编写通配符表达式以删除尾部斜杠。以下内容将匹配以正斜杠表示的任何HTTP或HTTPS URL,并从该URL中删除所有正斜杠:



RewriteRule ^(.*)/+$ $1 [R=301,L]




使用301重定向的更多内容,请点击此处了解详情:Best Practice: 301 Redirect HTTP to HTTPS (Standard Domain)

祝你好运!

答案 2 :(得分:0)

我没有看到编写规则会使其不重写的方式。但是,您有多个带有L标志的规则,这些规则可能会在比您要查找的更早的时间点停止对重写的处理。从文档

  

[L]标志使mod_rewrite停止处理规则集。在大多数情况下,这意味着如果规则匹配,则不会处理其他规则。   (https://httpd.apache.org/docs/current/rewrite/flags.html)。

您可以尝试使用此页http://htaccess.mwl.be/来测试所有规则。您可能需要重写它们以使用该页面,它不知道您的.htaccess文件所处的级别,因此您必须重写所有规则以从根触发,例如:RewriteRule ^digital\-marketing/content\-marketing\-strategy//$ /digital-marketing/content-marketing-strategy/? [L,R=301]