Сократить путь с помощью правильного регулярного выражения в mod_rewrite - PullRequest
0 голосов
/ 13 июня 2018

Мне нужно иметь одностороннюю функцию в mod_rewrite, которая дает путь, производящий префикс, используя только регулярное выражение, к сожалению, я не имею никакого контроля над реализацией этой системы.

Я могу только создать регрекс и дать емусистемному администратору.

Мне нужен шаблон regrex, который сокращает путь в префиксе с двумя символами следующим образом:

1) case point: "abc.cde" -> "ac" (first char of first word and first char of second word)
2) case minus: "abc-cde" -> "ac" (seme as abowe)
4) case point and minus after point: "abc.cde-fgh" -> "ac" 
3) case minus and point after minus: "abc-cde.fgh" -> "af"
4) case no point and no minus: "random" -> "ra" (take first two char)

Я видел, что есть тестер на regrex для mod_rewrite здесь

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Вы можете использовать эти правила в корне сайта .htaccess:

RewriteEngine On

# skip all files and directories from rewrite rules below
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^(\w)\w*[.-](\w)\w*/?$ /$1$2 [L,R=301]

RewriteRule ^(\w)[\w-]*\.(\w) /$1$2 [L,R=301]

RewriteRule ^(\w)(\w)[^.-]+$ /$1$2 [L,R=301]
0 голосов
/ 13 июня 2018

Вы можете собрать нужные вам письма, используя «группы захвата» (круглые скобки), и соединить три альтернативы, с которыми вы можете столкнуться |.Альтернативы: сначала имя файла с точкой \., затем с минусом - (но без смысла, потому что мы переходим ко второму варианту, если первый не соответствует), затем правило для слов без каких-либоминусы и очки (после того, как первые две альтернативы не совпадали):

s/(.).*\.(.).*|(.).*-(.).*|(..).*/$1$2$3$4$5/

https://regexr.com/3r2to

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...