.htaccess Apache重定向//到no //

tcomlyy6  于 2022-11-25  发布在  Apache
关注(0)|答案(3)|浏览(155)

一封电子邮件发出了错误的链接(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 ^content\-marketing\-strategy//$ /digital-marketing/content-marketing-strategy/? [L,R=301]

我是非常新的Apache和重定向,所以任何帮助是非常感谢!谢谢!
编辑:值得注意的是,这是在数字营销文件夹(https://www.digitalmarketer.com/digital-marketing/.htaccess)内的.htaccess文件中,这样做是为了使上述所有规则仅适用于数字营销文件夹。

w80xi6nr

w80xi6nr1#

您可以在其他规则的末尾使用insert rule将多个//剥离为/

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

Apache自动将多个//拆分为RewriteRule模式中的一个,因此捕获的值$0将所有//转换为/

v1uwarro

v1uwarro2#

您可以撰写万用字符表示式来移除尾端斜扛。下列表示式将符合任何以正斜扛结尾的HTTP或HTTPS URL,并移除该URL的所有尾端正斜扛:

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

更多使用301重定向的内容,请查看此处:Best Practice: 301 Redirect HTTP to HTTPS (Standard Domain)
祝你好运!

wfsdck30

wfsdck303#

我在规则的编写方式中没有看到任何会使其无法重写的内容。但是,您有多个带有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]

相关问题