2011-07-15 8 views
1

現在、私は私の.htaccessファイルにこれらのルールを持っている:現在のディレクトリでmod_rewriteを使うにはどうすればいいですか?

<IfModule mod_rewrite.c> 
     RewriteEngine On 
     RewriteRule ^(.*).css style.php?u=$1 [QSA] 
     RewriteRule ^(.*).xml rss.php?u=$1 [QSA] 
</IfModule> 

これは、次のURLリライトします:

http://domain.com/user.css 
http://domain.com/user.xml 

しかし、私はサブディレクトリからファイルをつかむしようとしている:http://domain.com/css/style.cssそれを同様に書き直される。

私の目標は、現在のディレクトリのみを書き換え、サブディレクトリのすべての実際のCSSファイルが書き換えられるため、サブディレクトリを避けることです。

どうすればこの問題を回避できますか?

+0

1)この.htaccessは、ルートフォルダなどのどこにありますか。 2)私が理解しているように、これらのルールは、ルートフォルダにのみ存在する.css/.xmlへのリクエストを書き換えることです(例: 'http:// domain.com/user.css')。サブフォルダ内の.cssファイルへのリクエスト(例: 'http:// domain.com/css/style.css')? – LazyOne

+0

1-はい、htaccessファイルはstyle.phpとrss.phpの同じディレクトリにあります。
2 - はい、私はちょうど現在のディレクトリのルールを書き換えたいですが、ロード時にはhttp://domain.com/css-or-some-dir/somefile.css、somefileはrootにあるstyle.phpを呼び出しています。 – greenbandit

答えて

3

あなたが行う必要がありますあなたのパターンはより限定的です:このは、^([^/]+)\.css$something.cssstyles\something.cssはそれと一致しません)に制限されている間に、何でも.cssと一致します。

<IfModule mod_rewrite.c> 
     RewriteEngine On 

     # do not do anything to real files or folders 
     RewriteCond %{REQUEST_FILENAME} -f [OR] 
     RewriteCond %{REQUEST_FILENAME} -d 
     RewriteRule .+ - [L] 

     RewriteRule ^([^/]+)\.css$ style.php?u=$1 [QSA,L] 
     RewriteRule ^([^/]+)\.xml$ rss.php?u=$1 [QSA,L] 
</IfModule> 
+0

こんにちは、上記のお返事ありがとう、私はもう1つの質問があります:私は本当のCSSファイルを同じディレクトリに配置し、あまりにも、ファイル名は、style.css場合、私は避けることができますre-writedですか? – greenbandit

+0

更新された回答を確認してください。それは一つの方法です。別の方法 - 'RewriteRule ^([^ /] +)\ .ssss $ styleの前に' RewriteCond%{REQUEST_URI}!=/style.css' **または** 'RewriteCond%{REQUEST_FILENAME}!-f'行を追加してください。 php?u = $ 1 [QSA、L] '。それは本当に状況が良い方に依存します。かなりの数の書き換えルールがあれば、答えの方が良いかもしれません。 – LazyOne

0

最も簡単な方法は、ファイルが実際のファイルであれば書き換えを避けるために、mod_rewriteを伝えることです:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^(.*).css   style.php?u=$1 [L,QSA] 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^(.*).xml   rss.php?u=$1 [L,QSA] 

ルールが適用されると、あなたは確かにないので、私は[L]タグ(終了)を追加しました次のルールをチェックする必要があります。

今のファイルが実際に存在する場合は、あなたが本当に何の「CSSの」サブディレクトリがURLに存在しない場合は、PHPスクリプトでそれらを処理する...のはそれを試してみましょう:

<Location "/css"> 
    RewriteEngine off 
</Location> 
+0

あなたは私のことを誤解しているかもしれませんが、私はこれらのファイルを現在のディレクトリに対してのみ書き直し、すべてのサブディレクトリを避けたいと考えています。 – greenbandit

関連する問題