1

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

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

我有一个名为 contains 的环境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');

感谢帮助。

4

2 回答 2

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]

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

于 2010-07-11T15:37:34.627 回答
0

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

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

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

可能有另一种解决问题的方法,但不幸的是(并且出于某些充分的原因)您无法使用mod_rewrite.

于 2010-07-09T13:51:27.837 回答