2009-08-22 10 views
0

私は、3つの部分に分かれ、/(スラッシュ)で区切られたルールを持っています。 彼らは/アプリ/コントローラ/アクションを表し、それらは//アプリ/アプリ/コントローラ作業も意味し、オプションです。Apache modrewrite htaccessの問題

事は、私は「フロントエンド」にデフォルトのアプリを設定することになる、この1の前に、別のルールをしたい、と私はそれがこのようになるはずだと思う、次のとおりです。

RewriteRule ^(.*)$ frontend/$1 

しかし、私が持っている場合URL /part1すべてはOKです。/frontend/part1として受け取ります。ただし、URLに/part1/part2のように/(スラッシュ)が含まれていると、500の内部エラーが発生します。このルールを削除すると、最初のルールは/frontend/part1/part2となり、このルール内に問題があります。それは$ 1がそれにスラッシュを受け入れないようです。それは知られている事実ですか?

そしてまた、私は現在のURLが既にフロントエンド/で始まる場合、このルールが実行されていないことを希望、私はこのような何かを考えている:

RewriteRule ^frontend(/.*)?$ frontend$1 [S=1] 

それとも、これはと、よりエレガントに行うことができますRewriteCond?

ありがとう!

答えて

2

は、このルールを試してみてください:

RewriteCond $0 !^frontend/ 
RewriteRule .* frontend/$0 [L] 
+1

感謝!それは動作するようです。 しかし、なぜ私が働いていなかったのか、あなたと私のsolutinの違いは何かを簡単に説明できますか? $ 0はすべてのクエリを意味します。 – treznik

+1

あなたのソリューションはおそらく無限ループを引き起こしています。しかし、私のルールは、 'frontend /'で始まる一致を 'frontend/... 'に書き換えることを除いています。そして、そうです、 '$ 0'はパターン全体のマッチを含んでいます。 – Gumbo