2010-07-08 39 views
1

我這裏有一個網站在我的本地:的.htaccess重定向 「使用domain.tld /」 到 「使用domain.tld//home.html」 的

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

感謝您的幫助。

回答

0

你想要做什麼將不起作用,因爲mod_rewrite不會擴展其測試模式中存在的任何變量。因此,當你做這樣的事情...

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

...你實際上做的是像你想的%{REQUEST_URI}的值進行比較,而不是價值"/mysite/www/"字符串"%{ENV:REWRITE_BASE}"。是否有理由不能直接在您的RewriteCond中指定值,或者只是移動規則以使它們相對於/mysite/www/目錄開始?

可能有另一種方法來解決這個問題,但不幸的是(由於某些原因),您不能使用mod_rewrite執行這種比較。

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] 

現在,這是正常的。謝謝你的回答! ;)

+0

呃,我有這個方法的另一個問題。我不能有一個像「建設中的網站」index.html。 我試圖添加一個「RewriteCond%{REQUEST_URI} index.html!-f」在第一個RewriteRule ...沒有奏效之前。 有什麼想法? – gnutix 2010-07-11 20:01:57