URL совпадения с регулярным выражением без расширения файла - PullRequest
6 голосов
/ 01 июня 2011

Мне нужна помощь в подборе следующих 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 регулярных выражения 1-е должно быть примерно таким: ^ / ([a-zA-Z0-9 _] +) (/)? (. *)? $ 2-й, чтобы поймать прямое имя файла "/filename.php" или "/filename.php/create/user" так что я могу перенаправить на unknown.php

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

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

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

Ответы [ 2 ]

1 голос
/ 01 июня 2011

Если вы хотите сопоставить эти .php случаи, вы можете попробовать это:

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

См. Здесь на Regexr

Если вы хотите избежать этих случаевпопробуйте это:

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

См. здесь Regexr

(?!\.php) - это прогноз с отрицательным прогнозом, который гарантирует отсутствие .php в этом месте.

1 голос
/ 01 июня 2011

Когда все, что у вас есть, это молот ...

Хотя это, вероятно, можно решить с помощью регулярного выражения, это, вероятно, неправильный инструмент для работы, если только у вас нет ограничений, которые ОБЯЗАНЫ использовать использование регулярных выражений.

Разбейте строку, используя «/» в качестве разделителя, посмотрите, заканчивается ли первый компонент на «.php»; если это так, отклоните его, в противном случае добавьте «.php» к первому компоненту и присоедините компоненты обратно, используя «/».

...