2011-05-31 18 views
5

以下のURLに一致するヘルプが必要です。ファイル拡張子なしの正規表現一致URL

/settings => /settings.php 
/657_46hallo => /657_46hallo.php 
/users/create => /users.php/create 
/contact/create/user => /contact.php/create/user 
/view/info.php => /view.php/info.php 
/view/readme - now.txt => /view.php/readme - now.txt 
/=> [NO MATCH] 
/filename.php => /unknown.php 
/filename.php/users/create => /unknown.php 

ドメイン名の後の最初の部分で終わるファイル名がある場合 は、それは私が私が2つの、正規表現が必要だと思う

を/unknown.phpにリダイレクトする必要があります(最後の2例を参照してください)「の.php」 第1位は、ほとんどのようなものでなければなりません:^ /([a-zA-Z0-9 _] +)(/)?(。*)?$ 直接ファイル名 "/filename.php"または "/ filename" php/create/user " 私はunknown.phpにリダイレクトすることができます

私が得た最初の正規表現は最初のpa rt。 =============================

request url: http://domain.com/user/create 
regex: ^/([a-zA-Z0-9_]+)(/)?(.*)?$ 
replace http://domain.com/$1.php$2$3 
makes: http://domain.com/user.php/create 

問題は、誰かが素晴らしいことだ正規表現の両方で私を助けることができれば、それはまたhttp://domain.com/user.php/create

と一致しています。

答えて

1

あなたはこれを試すことができます。

^\/([a-zA-Z0-9_]+)(\/)?(.*)?$ 

をあなたはこれを試すような場合を回避したい場合Regexr

にここを参照してください:

^/([a-zA-Z0-9_]+)(?!\.php)(?:(/)(.*)|)$ 

参照してください。ここにRegexr

(?!\.php)は、この場所に.phpが存在しないことを保証するネガティブな先見性があります。

+0

これはやっているようです。 (最初の例はregexrリンクとは異なりますが、regexrサイトのものは動作しています^ /([a-zA-Z0-9 _] + \。php)(/)?(。*)?$ ) –

1

あなたが持っているすべてをハンマーで...

これはおそらく正規表現で解決することができますが、あなたがそのMANDATE正規表現の使用を制約がない限り、それは、おそらく仕事のための間違ったツールです。 。

文字列を '/'を区切り記号として分割し、最初のコンポーネントが '.php'で終わるかどうかを確認します。そうでなければ '.php'を最初のコンポーネントに追加し、 '/'を使用してコンポーネントを戻します。あなたがそれらの.php例を一致させたい場合は

+1

これは、チェロキーウェブサーバー上の書き換えルールとして使用されます。 Cherokee webserverは私にURLを分割することを許可していませんが、プログラミング言語は本当に簡単になりますが、残念なことにオプションではありません。 –

関連する問題