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

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 に答える