2012-03-13 14 views
0

私はhttp://mysite.com/myappに座っているアプリを持っています。/myappフォルダにhtaccessファイルを置いて、すべての追加サブディレクトリをGET変数に変換します。例えば。 mod_rewrite help - サブディレクトリをGET変数に変換する

http://mysite.com/myapp => /myapp/index.php # this is happening) 
http://mysite.com/myapp/foo => index.php?sub=foo 
http://mysite.com/myapp/bar/ => index.php?sub=bar/ 
http://mysite.com/myapp/foo/bar?baz=bop => index.php?sub=foo/bar&baz=bop 

この

が動作していません。もちろん

Options +FollowSymlinks 
RewriteEngine on 
RewriteRule ^(/.*)\?(.*) ./index.php?sub=$1&$2 [NC] 

答えて

0

RewriteRuleが直接クエリ文字列では動作しないようご書き換えルールは意味がありません(意味 - それはURLの一部ではありません)一部は/foo/barになります)。 に一致するにはクエリ文字列RewriteCondを使用する必要があります。

あなたの場合は、既存のクエリ文字列を完全に変更/変更していないので、それを行う必要はありません。少しだけ追加するだけです。

は、このコードを試してみてください。

Options +FollowSymlinks 
RewriteEngine On 

RewriteRule ^(?!index\.php)(.*)$ index.php?sub=$1 [QSA,L] 

1. QSAは新しいものに現在のクエリ文字列を追加するmod_rewriteを伝えます。

2.このルールは、無限リダイレクトループを防ぐためにindex.phpファイルへの要求を除外します。

EDIT:

3.このルール(だけでなく、あなた自身の試み)既存のファイル(例えば画像、CSSなど)を含む任意のURLへのリクエストを書き換えます。するために、(私はあなたの例を使用してそれを書いてきました)この「制限」することによって、パスだけのRewriteRule行の前に次の行を追加します。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
+0

これは基本的に働いている、ありがとう!私は、/ myapp/foo /(後続のスラッシュ)のようなurlを置くか、または/ myapp/foo /(後続のスラッシュ)のようなurlを置くと、読み込まれないmyappディレクトリのsrcファイルmyapp/foo/bar(sub-sub)の場合、CSSファイルはロードされません。 (/ myapp/foo) – sprugman

+0

このサイトがあなたのローカルPCにある場合、またはあなたのApacheを完全に制御している場合は、デバッグの書き換え( 'RewriteLogLevel 9' ..またはhttp: /httpd.apache.org/docs/current/mod/mod_rewrite.html#logging for latest version)、そこからご覧ください。今、私は何が間違っているのか、そしてどこにいるのかを確かめることはできません。 – LazyOne

+0

別の方法として、現在のファイルではなく、Webサイトのルートに関連するcss | js |イメージへのリンクを作成してみてください。例: '../styles/main.css 'の代わりに'/myapp/styles/main.css') – LazyOne

0

ことはありません。 Just like the docs sayの場合、クエリ文字列をRewriteRuleにキャッチすることはできません。 /foo/bar?baz=bopパスにそれだけでURLのパス部分で動作します(例: -

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(/.*)$ ./index.php?sub=$1 [NC,QSA] 
+0

はすでに書き換えられたURLを書き換えるには注意してください - あなたのルールは、インデックスへの要求と一致します。 PHPも同様です。 – LazyOne

+0

これは 'RewriteCond!-f ...'のためのものです。 –

+1

それを追加します。そうでなければ、あなたのルールは不完全です。OPがコピー&ペーストすると、ほとんどの場合それはうまくいかないでしょう(他のルールにも基づいています)。 – LazyOne

関連する問題