0

这是我第一次尝试编写 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

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

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

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]

或使用环境变量,

再次感谢

4

2 回答 2

1

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

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

进入

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

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

于 2012-11-09T17:49:34.513 回答
0

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

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]

于 2017-04-06T12:06:59.223 回答