2011-01-08 13 views
2

:ここワイルドカードサブドメインの.htaccessとCodeIgniterの

http://domain.com/    --> http://domain.com/home 
http://domain.com/whatever  --> http://domain.com/home/whatever 
http://user.domain.com/   --> http://domain.com/user 
http://user.domain.com/whatever --> http://domain.com/user/whatever/ 

を、誰かがしかし、内部で、上記のURLに入力し、それは次のようになります右側のURLのようにリダイレクトされます。

また、サブドメインがダイナミックになります(つまり、http://user.domain.comは実際のサブドメインではなく、.htaccessの書き換えになります)

また、/ homeはそう何のサブドメインは、内部/家にそれを強制しないだろう、私のデフォルトのコントローラであります(上記#2の例に示すように)そのコントローラ内の(catch-all)関数になります。サブドメインが渡された場合うまくいけば

I」は(上記#4の例に示すように)賢明同様

は、それは、それのための任意の(キャッチオール)関数と共に(キャッチオール)をコントローラとして渡されることになりますここではあまり質問していませんが、このために適切な.htaccessまたはルーティングルール(Codeigniter内)を把握できないようです。

httpd.confとホストは正しく設定されています。以上により

RewriteEngine On 

RewriteBase/
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 

RewriteCond %{HTTP_HOST} ^([a-z0-9-]+).domain [NC] 
RewriteRule (.*) index.php/%1/$1 [QSA] 

RewriteCond $1 !^(index\.php|images|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L,QSA] 

、私が訪れたとき:

EDIT#1

はここの近くに来ているが、いくつかの点でめちゃくちゃにされた私の.htaccessだhttp://test.domain/abc/123これは私が気づくものです$ _SERVER varで(一部のフィールドを削除しました):

Array 
(
    [REDIRECT_STATUS] => 200 
    [SERVER_NAME] => test.domain 
    [REDIRECT_URL] => /abc/123 
    [QUERY_STRING] => 
    [REQUEST_URI] => /abc/123 
    [SCRIPT_NAME] => /index.php 
    [PATH_INFO] => /test/abc/123 
    [PATH_TRANSLATED] => redirect:\index.php\test\test\abc\123\abc\123 
    [PHP_SELF] => /index.php/test/abc/123 
) 

PATH_TRANSLATEDが適切でないことがわかりますmedと私は物事を台無しにするかもしれないと思いますか?

答えて

-1

これは動作するはずです。テストして、動作していることを教えてください:

RewriteEngine On 
RewriteCond %{HTTP_HOST}    ^[^.]+\.domain\.com$ 
RewriteRule ^(.+)      %{HTTP_HOST}$1  [C] 
RewriteRule ^([^.]+)\.domain\.com(.*) /$1$2     [L] 
RewriteRule ^(.*)      /home$1    [L] 
+1

おかげさまで、残念ながらそれはうまくいきませんでした。サーバー500が発生しました(構成エラーの可能性があるため、10回の内部リダイレクトの制限を超えてリクエストが発生しました) – Gautam

+0

これでテストを実行し、正しい組み合わせを見つけます。 – takinbo

0

[OK]を私はそれを解決したと思います。ここに私がこれまで持っているものがあります。

まず.htaccessの

RewriteEngine On 

RewriteBase/

# if REQUEST_URI contains the word "user" and the 
# SERVER_NAME doesn't contain a "." re-direct to the root 
# The reason this is done is because of how the last two rules 
# below are triggered 
RewriteCond %{REQUEST_URI} (user) [NC] 
RewriteCond %{SERVER_NAME} !\. 
RewriteRule (.*)/[L,R=301] 

# Allow files and directories to pass 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 

# Codeigniter rule for stripping index.php 
RewriteCond $1 !^(index\.php|images|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [C] 

# Force wild-card subdomains to redirect. 
# E.g. http://me.domain/foo/bar/123 as http://domain/user/me/index.php/foo/bar/123/bar/123/ 
RewriteCond %{HTTP_HOST} ^([a-z0-9-]+).domain [NC] 
RewriteRule (.*) /index.php/user/%1/$1/ [L] 

そして最後に、あなたが動作するすべてのものの上から見ることができるように

<?php 
// Force routing to userhome controller if URL contains the word "user" 
// otherwise force everything else to home controller 
$route['user/:any'] = "userhome"; 
$route[':any'] = "home"; 
?> 

routes.phpの。私が理解できない唯一のことは、サブドメインを使用するときに最後の引数が繰り返される理由です。

私が行う場合:http://me.domain/foo/bar/123

それから私のPATH_INFOが示されている:http://domain/foo/bar/123

それから私のPATH_INFOは、私がしなければ

完璧です/fooの/バー/ 123/しかしとして示されていますas /user/me/index.php/foo/bar/123/bar/123/ 大部分はOKですが、最後にパラメータが繰り返されるのはなぜですか?

全体的に私はそれが機能していると思います。私がしなければならないことは、\コントローラに追加するコントローラのいくつかのルートを持つことだけです。周りに道がないかぎり?

関連する問題