2011-08-16 16 views
3

regexpは「index.phpに従わないものはすべて 'index.php/$ 1'」を指す必要がありますか?Apache redirect regexp:何かをしていないものと一致する

たとえば、「http:// mysite/moo」は「http://index.php/moo」を指し、「http://index.php/moo」は指すべきではありません。

私は現在、PCRE regexpを使用しています(Apache docsはPCREをここで使用する必要があります)。RedirectMatch (?<=index\.php)(\/.+) /index.php/$1

何が正しいですか?

UPD:ポイントは、ommitting mod_rewriteの

+0

'<= 'あなたが持っているために否定'である< ' – mario

+0

@mario?は?! 、 'RedirectMatch(?<= index \ .php)(\ /.+)/ index.php/$ 2'は'/index.php/'に永遠にリダイレクトします。あなたは何かアドバイスできますか? – shybovycha

答えて

3

はあなたが非マッチングパターン( "!" プレフィックス)でRedirectCondを使用することができますmod_aliasを使用することです。試してみてください:

RewriteCond %{REQUEST_URI} !^/index.php 
RewriteRule (.*) index.php/$1 

または:たぶん

RewriteCond $1 !^/?index.php 
RewriteRule (.*) index.php/$1 
+1

申し訳ありませんが、私はmod_rewrite =は必要ありません – shybovycha

2

を:

^/?(?!index\.php)(.+) 

すなわち否定先読み

+0

はURLのものと一致するようですが、リダイレクトルールはどうすればいいですか? '/ index.php/$ 1'は再帰的に無限のURLを与えます=) – shybovycha

0

私は、静的なサイト(作品)に簡単にリダイレクトしてみました:

RedirectMatch ^(?!/index\.htm$).*$ /index.htm 

これに基づき、以下では(自分自身を試していない)あなたを助けるかもしれない:

RedirectMatch ^(?!/index\.php$)(.*)$ /index.php$1 

See also: Mastering Lookahead and Lookbehind

関連する問題