htaccess 规则将 /login/ 和 /login 转发到同一页面?

Posted

技术标签:

【中文标题】htaccess 规则将 /login/ 和 /login 转发到同一页面?【英文标题】:htaccess rule to forward /login/ and /login to same page? 【发布时间】:2010-11-09 12:36:46 【问题描述】:

我当前的 .htaccess 文件中有以下规则将 /videos/login/ 请求重定向到 /videos/login.php

RewriteRule login/ /videos/login.php

如果我使用http://mysite.com/videos/login/ 访问登录页面,这可以正常工作,但是当我尝试使用http://mysite.com/videos/login(没有结束斜杠)访问同一页面时,它会给我“404 页面未找到”错误。

请告诉我 .htaccess 文件的正确规则是什么,以便对 http://mysite.com/videos/login/http://mysite.com/videos/login 的任何请求都指向同一个 /videos/login.php 页面。

谢谢

【问题讨论】:

【参考方案1】:

只需将尾部斜杠设为可选:

RewriteRule ^videos/login/?$ /videos/login.php

但您最好只使用一种变体(带或不带斜杠)并将一个变体重定向到另一个变体:

# add trailing slash
RewriteCond %REQUEST_FILENAME !-f
RewriteRule .*[^/]$ /$0/ [L,R=301]

# remove trailing slash
RewriteRule (.*)/$ /$1 [L,R=301]

【讨论】:

@Gumbo 您的规则运行良好,它打开带有和不带斜线的同一页面,但我希望当任何人访问 /videos/login 时,他将被重定向到 /videos/login/是否可以使用 htaccess。 我刚刚提到了这两个选项。如果你想要尾部斜杠,只需使用前者。 但是#add 尾部斜杠会在我所有的 URL 中添加斜杠,这是我不想要的,有一些我想要这个工具的选定 URL 将在每个无法映射到现有文件 (RewriteCond %REQUEST_FILENAME !-f) 的 URL 路径中添加尾部斜杠。但是,如果您不希望这样,请使用 RewriteCond %REQUEST_URI ^/(videos/login|foo/bar|baz/quux|…)$ 列出您想要的 URL 路径。【参考方案2】:

使用 mod_rewrite

RewriteEngine On
RewriteCond %REQUEST_URI ^/videos/login/?$
RewriteRule (.*) /videos/login.php [L,R=301]

【讨论】:

【参考方案3】:
重定向 301 /videos/login/index.html http://yoursite.com/videos/login.php

服务器会将地址 http://mysite.com/videos/login/ 和 http://mysite.com/videos/login 都更改为 http://mysite.com/videos/login/index.html,基于配置,但这是默认设置。在遇到 404 之前,此地址被重定向到新地址。至少这在我的网站上有效。

不得不使用 pre 因为网站让我只发布一个超链接:/

【讨论】:

【参考方案4】:

这对我来说很好:

重写规则 ^login(/|)$ /videos/login.php

【讨论】:

以上是关于htaccess 规则将 /login/ 和 /login 转发到同一页面?的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess RewriteRule 和 FallbackResource 不起作用

htaccess重写工作但不是所有规则

如果我使用.htaccess mod重写规则,PHP Cookie不可用

如何修改 503 htaccess 规则以避免“Googlebot 无法访问您的网站”错误?

.htaccess ci放在子目录时规则

wordpress 中 wp-login.php 的重定向和 authuser 的 .htaccess 问题