Regex match 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

если первая часть после доменного имени является именем файла, заканчивающимся на ".php" (см. последние 2 примера) Он должен перенаправлять на /unknown.php

Я думаю, что мне нужно 2 регулярных выражения Первое должно быть почти что-то вроде: ^/([a-zA-Z0-9_]+)(/)?(.*)?$ 2-е, чтобы перехватить прямое имя файла "/filename.php" или "/filename.php/create/user" чтобы я мог перенаправить на unknown.php

Первое регулярное выражение, которое я получил, почти работает для первой части. ==============================================

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

Если кто-то может помочь мне с обоими регулярными выражениями, это было бы здорово.

6
задан Cecil Zorg 31 May 2011 в 20:36
поделиться