【问题标题】:.htaccess redirect "domain.tld/" to "domain.tld/home.html".htaccess 将“domain.tld/”重定向到“domain.tld/home.html”
【发布时间】:2010-07-08 20:10:47
【问题描述】:

我的本​​地主机上有一个网站:

http://localhost/mysite/www/index.php

我有一些 RewriteRules 可以像这样重定向:

http://localhost/mysite/www/index.php?page=home
->  http://localhost/mysite/www/home.html

现在,我想做一个这样的重定向:

http://localhost/mysite/www/
->  http://localhost/mysite/www/home.html

我有一个名为REWRITE_BASE 的环境变量,其中包含/mysite/www/。所以我想做的是将{REQUEST_URI}%{ENV:REWRITE_BASE} 进行比较......就像这样:

RewriteCond {REQUEST_URI} =%{ENV:REWRITE_BASE}

RewriteRule . %{ENV:REWRITE_BASE}home\.html [R=301,L]

但效果不好。

为了帮助你理解我想要做什么,这里是 PHP 中的工作代码来做我想做的事情:

$rewriteBase = getenv('REWRITE_BASE');

if ($rewriteBase === $_SERVER['REQUEST_URI'])
    header('Location: '.$rewriteBase.'home.html');

感谢您的帮助。

【问题讨论】:

    标签: .htaccess redirect apache2 root


    【解决方案1】:

    好的...所以,因为我不能使用变量进行比较,所以这是我让它工作的方式:

    # Redirect domain.tld/ to domain.tld/home.html
    RewriteCond %{REQUEST_URI} =/www/ [OR]
    RewriteCond %{REQUEST_URI} =/mysite/www/
    RewriteRule ^(.*)$ %{REQUEST_URI}home\.html [R=301,L]
    
    # RewriteBase equivalent - Production environment
    RewriteRule . - [E=REWRITE_BASE:/www/]
    
    # RewriteBase equivalent - Development environment
    RewriteCond %{HTTP_HOST} ^localhost$
    RewriteRule . - [E=REWRITE_BASE:/mysite/www/,E=DEVELOPMENT_ENV:1]
    
    # Website rewritings
    RewriteRule ^([^/]*)(?:/([^/]*))?\.html$ %{ENV:REWRITE_BASE}index\.php?page=$1&view=$2 [QSA,L]
    

    现在没事了。感谢您的回答! ;)

    【讨论】:

    • Erf,我这个方法还有一个问题。我不能拥有像“正在建设的网站”那样的 index.html。我试图在第一个 RewriteRule 之前添加一个“RewriteCond %{REQUEST_URI}index.html !-f”...没有用。有什么想法吗?
    【解决方案2】:

    您想要做的不会起作用,因为mod_rewrite 不会扩展其测试模式中存在的任何变量。因此,当你做这样的事情时......

    RewriteCond %{REQUEST_URI} =%{ENV:REWRITE_BASE}
    

    ...您实际上正在做的是将%{REQUEST_URI} 的值与字符串"%{ENV:REWRITE_BASE}" 进行比较,而不是您想要的值"/mysite/www/"。是否有理由不能直接在 RewriteCond 中指定值,或者只是移动规则以使其相对于 /mysite/www/ 目录开始?

    可能有另一种方法可以解决该问题,但不幸的是(出于某些充分的原因)您无法使用 mod_rewrite 进行这种比较。

    【讨论】:

      猜你喜欢
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-11
      • 1970-01-01
      • 2012-11-06
      相关资源
      最近更新 更多