Вам нужен положительный взгляд вперед (?=.*\/p\/)
для обеспечения присутствия /p/
и отрицательный взгляд вперед (?!.*\.html$)
, чтобы строка не заканчивалась .html
.Вот правильное регулярное выражение:
^(?=.*\/p\/)(?!.*\.html$).+$
Демо
Затем попробуйте переписать условие if так, как вы это делали, что должнобудь это,
location ~ ^(?=.*\/p\/)(?!.*\.html$).+$ {
rewrite ^(.+)/$ $1.html permanent;
}
Кроме того, в вашем регулярном выражении [^.html]
это отрицание символов и будет отменять только определенные символы, присутствующие в наборе символов после ^
, а для отрицания последовательности символов вам необходимоиспользуйте шаблон с отрицательным взглядом вперед, как я делал в своем регулярном выражении.