2012-01-24 5 views
1

私はmod_rewriteを初めて使用しているため、タイトルが明確でない場合は謝罪します。mod_rewriteはURLの変数の数値の位置を使用します

私は、このようなhttp://www.url.com/d_1=module & D_2 = にhttp://www.url.com/module/subdirectory/another_subdirectory/pageとして空想URLを書き換えたいですサブディレクトリ& d_3 =別サブディレクトリ&ページ=ページ。サブディレクトリの数は変化するので、パラメータd_ *は動的である(ただし、d_1とd_9の間に維持しようとする)。 fancy urlは独自のクエリ文字列を持つこともでき、pageパラメータの後に記述する必要があります。

私はApacheのmod_rewriteとregexのドキュメントを読んで、これに答えてGoogleとStackoverflowで検索しましたが、この特定の問題については何も見つかりませんでした。はるかにknowledgable誰かからこの問題の任意の助けは大いに感謝されるでしょう。

+0

アプリケーションでこのロジックを実行する方がはるかに簡単です。 php。私はあなたがApacheでこれを試みる良い理由があると仮定します。 –

+0

私はカスタムPHP CMSで名前空間を使っています。各ページは、独自のファイル内のクラスです。 url **?d_1 = module&d_2 =サブディレクトリ&d_3 = another_subdirectory&page = page **は、\ Module \ Subdirectory \ AnotherSubdirectory \ Pageクラスをインスタンス化するようにCMSに指示します。私は華麗なURLが醜さを隠すようにしたかった。私は見ていないとこれにアプローチする別の方法はありますか? – user1166443

答えて

0

あなたは9

までの例を完了する必要がありますけれども、私はまた、あなたのCMSアプリケーションでのindex.phpであると仮定しています、ルートディレクトリに.htacessに以下のようなものを試すことができます。正しい.PHPファイルを使用して、オプションのサブディレクトリ部品を作ることにより、繰り返し同じくらい必要はありませんウルリッヒのコードの

RewriteEngine on 
RewriteBase/

#one subdir 
RewriteRule ^module/([^/]+)/([^/]+)$ index.php?d_1=module&d_2=$1&page=$2 [QSA,L,NC] 
#two subdir 
RewriteRule ^module/([^/]+)/([^/]+)/([^/]+)$ index.php?d_1=module&d_2=$1&d_3=$2&page=$3 [QSA,L,NC] 
#three subdir 
RewriteRule ^module/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ index.php?d_1=module&d_2=$1&d_3=$2&d_4=$3&page=$4 [QSA,L,NC] 
0

改変を交換する場合ではありません。最後の部分は常にpageにマップ:

RewriteRule ^(module)/(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?(?:([^/]+)/)?([^/]+)$ index.php?d_1=$1&d_2=$2&d_3=$3&d_4=$4&d_5=$5&d_6=$6&d_7=$7&d_8=$8&page=$9 [QSA,L,NC] 

私はこのためにいくつかのPHPコードを使用することを好むだろうけど。

$dirs = expode('/', $_SERVER['REQUEST_URI']); 
array_shift($dirs);//remove first empty string. 
$page = array_pop($dirs);//get last part of the url. 
関連する問題