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 mod重写规则,PHP Cookie不可用