2011-06-17 8 views
1

私は、既存のファイルやディレクトリではない場合、すべてをindex.phpに送るModRewriteの単純な部分を持っています。ModRewriteの条件は可能ですか?

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^(.*)$ /index.php/$1 [L] 

ドメインに特定の文字列が含まれている場合は例外を追加したいが、これを追加する方法はわからない。私は以下を追加することを考えていた。

RewriteEngine on 
# if a directory or a file exists, use it directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# If not an old project 
RewriteCond %{HTTP_HOST} !^(aanmelding|keyclamps|probouw) 

# forward it to index.php 
RewriteRule ^(.*)$ /index.php/$1 [L] 

# Else 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# forward it to project.php 
RewriteRule ^(.*)$ /project.php/$1 [L] 

それは動作しますが、バグで:私はこのようにそれを置く場合

RewriteCond %{HTTP_HOST} ^(aanmelding|keyclamps|probouw) 
RewriteRule ^(.*)$ /project.php/$1 [L] 

UPDATEは、私は部分的な解決策 を見つけました。 index.phpが存在するので、条件付きの2番目の部分は、プレーンドメインが呼び出されたときにproject.phpではなくindex.phpに移動します。http://probouw.localhost/

アイデア?

+0

あなたは常に 'index.php'にリダイレクトされることを意味し、「動作しない」のか? –

+0

ああ、私はサーバーエラーが発生するので、まずは間違っています。それとは別に、エラーは発生しません。 – Edward

+0

通常、Apacheエラーはログに記録されます。ログにアクセスできますか? –

答えて

3

は、解決されました:

RewriteEngine on 
# if a directory or a file exists, use it directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# If not an old project 
RewriteCond %{HTTP_HOST} !^(aanmelding|keyclamps|probouw) 

# forward it to index.php 
RewriteRule ^(.*)$ /index.php/$1 [L] 

# Else 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d [OR] 
RewriteCond %{REQUEST_URI} =/ 

# forward it to project.php 
RewriteRule ^(.*)$ /project.php/$1 [L] 
+0

+1ニース。私はそれを考え出していない。あなたがうまくやってくれてうれしい。 – Tomgrohl

0

おそらく、ORを使用すると助けになるでしょう(NC = NotCaseは途中で敏感です)?

RewriteCond %{HTTP_HOST} ^.*aanmelding.*$ [NC,OR] 
RewriteCond %{HTTP_HOST} ^.*keyclamps.*$ [NC,OR] 
RewriteCond %{HTTP_HOST} ^.*probouw.*$ [NC] 
+0

この解決策も機能します(私の説明には申し訳ありませんが、 'contains'は 'starts with'であるはずですが、あなたのコードを取得してください)。まだそこにバグがありました(私の更新を見てください)。 index.phpも存在する場合、どのようにproject.phpに移動するのですか? – Edward

+0

申し訳ありませんが、今はあまり時間がかかりません。おそらく、index.phpの名前をdefault.phpのように変更することで回避できますか? – Bing

+0

いいえ、問題です。ありがとう!私はindex.phpの名前を変更することはできませんので、私はこの するRewriteCondの%{REQUEST_FILENAME}!-d [OR] するRewriteCondの%{REQUEST_FILENAME} ^/$ を試して、あなたのコードを使用ししかし、それはそれのいずれか – Edward

0

部分的な解決策に関して、最後の部分を変更した場合、これは機能しますか?これを必要とするかもしれない人のため

# forward it to project.php 
RewriteRule ^/?$ /project.php [L] 
RewriteRule ^(.*?)$ /project.php/$1 [L] 
+0

Thxをしませんでした!しかし、それは動作しませんでした。ルートが存在し、RewriteRulesが実行されていないので、 "/"は有効な条件ではないという問題があると私には思えます。 – Edward

+0

REQUEST_FILENAMEが "/"のときに、RewriteRuleをexcecuteにする方法も知っていますか?私は%{REQUEST_FILENAME}を試しました!-d [OR] RewriteCond%{REQUEST_FILENAME} ^/$しかし、うまくいきませんでした。 – Edward

+0

私はそれをチェックアウトします。それがうまくいかない理由を見てください。 – Tomgrohl

関連する問題