htaccess RewriteRule页面未正确重定向

时间:2012-11-09 12:56:39

标签: .htaccess mod-rewrite redirect

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

但如果我不能使第一条规则发挥作用,我认为我不会发现如何制定真正的规则。

编辑: 避免无限循环我不能尝试通过捕捉变量来了解我是在第一个还是第二个?我试过的一些想法(和faild):

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]

或使用环境变量

再次感谢

2 个答案:

答案 0 :(得分:1)

您拥有的第一条规则会产生无限循环。 mod_rewrite在使相对链接绝对时并不是那么出色。这应该在HTML中完成。例如,转动

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

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

然而,第二条规则有效,因为它做了mod_rewrite做得非常好,并且从一个页面或URL重定向到另一个页面或URL。有关详细信息,请参阅Apache documentation

答案 1 :(得分:0)

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

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

这对我有用(:


    RewriteEngine on

    # Check for POST Submission | 
    # Because POST parameters aren't retained on a redirect.
    # You can omit that line if you want to make sure that all POST submissions are secure   
    # (any unsecured POST submissions will be ignored)
    RewriteCond %{REQUEST_METHOD} !^POST$

    # Forcing HTTPS
    RewriteCond %{HTTPS} !=on [OR]
    RewriteCond %{SERVER_PORT} 80
    # Pages to Apply
    RewriteCond %{REQUEST_URI} ^something_secure [OR]
    RewriteCond %{REQUEST_URI} ^something_else_secure
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]