【问题标题】:htaccess RewriteRule The page isn't redirecting properlyhtaccess RewriteRule 页面没有正确重定向
【发布时间】:2012-10-29 19:08:32
【问题描述】:

这是我第一次尝试编写 htaccess 规则。我的目标是将所有相对链接重定向到绝对链接。一开始我在测试:

RewriteEngine On

RewriteRule gallery\.php$ http://www.domain.com/sample/gallery.php
RewriteRule info\.php$ http://www.domain.com/sample/gallery.php

当我单击链接时,第一个规则使 Firefox 抛出错误“页面未正确重定向”,而第二个规则工作正常。未来的想法是写一个规则,比如,

RewriteRule catchAllRelativeLinks$ http: //www.domain.com/sample/$1

但如果我不能使第一条规则起作用,我想我将找不到如何制定真正的规则。

编辑: 为了避免无限循环,我不能通过捕获变量来尝试了解我是在第一个还是第二个位置?我尝试过的一些想法(但失败了):

RewriteCond %{IS_SUBREQ} false
RewriteRule ^gallery\.php$ http://www.domain.com/gallery.php?a [R=302,L]

RewriteCond %{THE_REQUEST} !(\?something)$
RewriteRule ^gallery\.php$ http://www.domain.com/gallery.php?something [R=302,L]

或使用环境变量,

再次感谢

【问题讨论】:

  • 第一个要匹配的是什么?是否意味着/gallery.php 重定向到/sample/gallery.php?如果是这样,它应该包括^,如^gallery\.php$
  • 你可以查看这个解释和指南(:stackoverflow.com/a/21754308/5465790

标签: .htaccess mod-rewrite redirect


【解决方案1】:

您拥有的第一条规则会导致无限循环。 mod_rewrite 在使相对链接绝对化方面并不是那么出色。这应该在 HTML 中完成。比如转

<a href="gallery.php">Gallery</a>

进入

<a href="/sample/gallery.php">Gallery</a>

但是,第二条规则之所以有效,是因为它在 mod_rewrite 的某些方面做得非常好,那就是从一个页面或 URL 重定向到另一个页面或 URL。有关这方面的更多信息,请参阅Apache documentation

【讨论】:

  • 为了避免无限循环,我不能捕捉 IS SUBREQ 或抛出并捕捉参数吗?我编辑了这个问题。
  • 是的,看来只能重定向一次。
【解决方案2】:

您可以查看此链接以获取详细说明。

https://wiki.apache.org/httpd/RewriteHTTPToHTTPS

这对我有用(:

重写引擎开启 # 检查 POST 提交 | # 因为 POST 参数不会保留在重定向中。 # 如果要确保所有 POST 提交都是安全的,可以省略该行 # (任何不安全的 POST 提交都将被忽略) 重写条件 %{REQUEST_METHOD} !^POST$ # 强制 HTTPS RewriteCond %{HTTPS} !=on [OR] RewriteCond %{SERVER_PORT} 80 # 申请页数 RewriteCond %{REQUEST_URI} ^something_secure [OR] RewriteCond %{REQUEST_URI} ^something_else_secure RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 2018-06-08
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多