2012-03-06 3 views
4

.htaccessを動的相対パスを「理解」し、それらに正しくリダイレ​​クトすることは可能ですか?その上.htaccessで動的相対パスにリダイレクトしますか?

http://domain.com/htroot/aaa/xyz 
http://domain.com/htroot/bbb/xyz 
http://domain.com/htroot/ccc/xyz 

そして:

私のセットアップは、次のようになります。この例では、 "htroot"には変更する必要のある.htaccessが含まれています。次のサブレベル(aaa、bbb、ccc)にはa-z0-9の名前を指定でき、フォルダにはindex.php(またはリダイレクト先の.php)があります。 xyzは、並べ替えのパラメータとして機能するはずです。次の部分を参照してください。 xyzの部分は、「物理的な」フォルダまたはファイルとしてファイルシステム上にありません。私は達成するために必要なもの

は以下の通りです:あなたはURL

http://domain.com/htroot/aaa/xyz 

にアクセスすると、それは

http://domain.com/htroot/aaa/ (or http://domain.com/htroot/aaa/index.php, either way) 

のindex.phpキックでからコンテンツを取得 - >私は得ることができますがxyzがREQUEST_URIから解析され、ページのURLが当然http://domain.com/htroot/aaa/xyzのままである間に、それが指定する正しいコンテンツを提供するように処理します。

これまでのところ、すべてのサブレベル(aaaなど)に独自の.htaccessがある場合、これを取り除くことができましたが、これを処理するにある単一の.htaccessがある場所が必要です。私は、.htaccessの$ 0パラメータと何か関係があるかもしれないと推測していますが、わかりません。

答えて

3

あなたはこのような何かを実行したいことがあります。

​​

を、それが

からコンテンツを取得します(htroot/AAA/XYZ)最初のワイルドカード一致 (.*)aaaであり、第二のワイルドカード一致 (.*)xyzある場合

htroot/AAA /index.php?data= XYZ

、あなたはこれが一般的なルールセットとして動作するはず$_GET['data']

+0

htaccessファイルがルートにある場合、URLのhtroot部分が削除されます。 htaccessファイルは、(ハッリが説明のように)htroot内にある場合は、コードから '/' htrootを削除する必要があります。私はまた、このコードは無限ループを作成すると思います。 – Gerben

+0

ああ、私はループを逃しました。そのために残念!ファイル/ディレクトリが存在しない場合にのみ、書き換えルールを実行するために書き換えcondsを追加しました。 'RewriteCond%{REQUEST_FILENAME}!index \ .php $'を使うことも別の可能性があります。 – Fabian

+0

今は大丈夫です。 +1 – Gerben

1

OK、それは私がそれが動作する方法で理解していない何か、私はまだmod_rewriteについて学ぶためにたくさんあると思います。

しかしhtroot/.htaccessファイルでは、このように、それが動作します:

RewriteEngine On 
RewriteRule ^aaa/(.*)$ aaa/index.php?$1 [L,QSA] 
RewriteRule ^bbb/(.*)$ bbb/index.php?$1 [L,QSA] 
RewriteRule ^ccc/(.*)$ ccc/index.php?$1 [L,QSA] 

あなたは[ 'XYZ'] $ _GETにアクセスすることができますか、あなたのindex.phpスクリプトに/後に入れたものは何でも。また、$ _GET配列にボーナスの 'index_php'エントリがありますが、内部リダイレクトが動作する方法だと思います。

+0

作品ではなく、ダイナミック私は恐れている。私は数百または100のaaa/bbb/ccc/dddなどのフォルダを持つことができるので、常にフォルダと同期して保持する必要があります。 –

1

とindex.phpの中XYZ値を取得することができます:ある程度まで

RewriteEngine On 
RewriteCond %{REQUEST_URI} !\.php 
RewriteRule ^(.*)/(.*) /htroot/$1/index.php?parameters=$2 [L,QSA] 
+0

上記と同じ考えです。うまく動作します! –