.htaccess将“domain.tld /”重定向到“domain.tld / home.html”

时间:2010-07-08 20:10:48

标签: .htaccess redirect apache2 root

我的localhost上有一个网站:

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');

感谢您的帮助。

2 个答案:

答案 0 :(得分: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]

现在没关系。谢谢你的回答! ;)

答案 1 :(得分:0)

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

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

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

可能有另一种方法可以解决问题,但遗憾的是(并且出于某些原因)您无法使用mod_rewrite执行此类比较。