Как сопоставить квантификаторы {6,} в RewriteRules? - PullRequest
1 голос
/ 08 мая 2019

Я выполнил правило перезаписи, сопоставляя имена документов, состоящие из 6 символов, и оно успешно выполнено.

RewriteRule ^document\/(.{6})\/?$ document/?name=$1 [NE,L]

Поскольку я знаю, что документы именуются только до 12 символов, я добавил квантификатор максимальной длины.Однако, используя это, он выдает 500 Ошибка сервера:

RewriteRule ^document\/(.{6,12})\/?$ document/?name=$1 [NE,L]

На самом деле, я получаю следующие результаты:

(.{6}) работает (.{6,}) неисправности (.{6,7}) работает(.{6,8}) работает (.{6,9}) неисправности и т. Д.

Я должен также упомянуть, что https://www.regexpal.com/?fam=109235 говорит мне, что с моим правилом все в порядке.Однако я все еще получаю сообщение об ошибке сервера 500.

Спасибо @emma, примеры URL, которые нужно переписать:

http://www.mywebsite.com/document/051201-22

http://www.mywebsite.com/document/051201-22/

Ответы [ 2 ]

1 голос
/ 18 мая 2019

Я думаю, что вы входите в цикл перенаправления с этой настройкой. Добавьте RewritCond, чтобы убедиться, что в запросе нет строки запроса

RewriteCond% {QUERY_STRING} ^ $

RewriteRule ^ document / ([^ /] {6,12}) /? $ Document? Name = $ 1 [NE, L]

0 голосов
/ 10 мая 2019

Я не совсем уверен, как вы хотели бы написать этот RewriteRule. Однако этот инструмент может помочь вам сначала найти выражение, а затем написать и протестировать RewriteRule. Я уверен, что вы можете написать это без использования квантификатора. Например:

document\/([0-9]+)

передаст ваши проверенные URL.

Затем, если вы хотите заменить только первые шесть цифр на переменную name, вы можете написать RewriteRule, похожий на:

<IfModule mod_rewrite.c>
    RewriteEngine On 
    RewriteCond %{HTTP_HOST} mywebsite\.com [NC]
    RewriteRule document\/([0-9]+) document\/?name=$1 [NE,L]
</IfModule>

Для конечных слешей да или нет, они могут работать:

# No Trailing Slash Policy, if you wish no slash at the end of your URLs
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R] # <- for test, for prod use [L,R=301]

# Trailing Slash Policy, if you wish to have a slash at the end of your URLs
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1/ [L,R] # <- for test, for prod use [L,R=301]

enter image description here

...