2011-07-21 9 views
1

私のhtaccessのはlocalhost/me/.htaccessに位置しており、私は最後の/の.phpとmod_rewriteのは、最後のマッチ

例えば後に何かを追加したいですlocalhost/me/test/index.php

からlocalhost/me/test/index書き換えは、これまでのところlocalhost/me/indexためRewriteRule ^([A-Za-z]+)$ $1.php [NC,L]作品が、私はそれがそこまで最初の例のために働いて得ることができません。 ^/([A-Za-z]+)$ /$1.php [NC,L]はなぜ機能しないのですか?それをどのように変更するのですか?

+0

はwhile..but '^'は複数のスラッシュが含まれている場合があり、パスの開始からすべての方法を一致させるために、それを強制することができた(?)その場合、あなたは」に書き換えてプレイしていません一致することはありません。ですから、私は '^'を試してみて、何が起こるか見てみましょう。 '$'はすでにそれを最後に引っ掛けています。パターンは貪欲でなければなりません。最後までスラッシュの後にすべてを食べます。 – Casper

答えて

1

アルファベットのみで一致し、文字クラスに/がなく、あなたのURIがme/test/indexであるため、動作しません。これを試してください:あなたは[NC]を使用しているので、

RewriteEngine On 
RewriteRule ^([A-Za-z/]+)$ $1.php [NC,L,QSA] 

はまた、あなたが本当に唯一a-zではなくA-Za-zを必要とするが、それは何を傷つけることはありません。

2

使用このルール:^([A-Za-z]+)$それはindexなくtest/indexにマッチします:

# add .php file extension 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.+)$ $1.php [L,QSA] 
  1. をこのような.PHPは

  2. を書き換える前に存在した場合、あなたが持っていた主な問題は、あなたのパターンでチェックしますそれはa-z文字しか許可されていないためです。パターンに/を追加する必要があります:^([a-z/]+)$

  3. あなたは[NC]フラグ(なしケースマッチング)を持っているので、私は一般的な/よりグローバルなパターン(.+)を使用しています両方A-Za-z

  4. を持ってする必要はありません - それは任意の文字と一致しているためだろうが、 「ファイルが存在するかどうかを確認する」という条件が付いてくるので、制限された文字セットについて心配する必要はありません。

+0

+1 '(。+)'は私よりも完全です。 –

+0

この答えはより広範囲ですが、拡張子にマッチする '(。+)修飾子のためにRewriteCondを追加する必要があります。マイケルの答えは簡単です。これは、正規表現と一致しないため、.php拡張子を通過させ、私のスタイルシートのような他のファイルと干渉しないようにします。私は[NC]フラグに気付いてupvoteでした! – Drahcir