Соответствие RegEx для перенаправления URL в htaccess - PullRequest
0 голосов
/ 02 мая 2019

У меня есть несколько динамических URL.Если я взял URL с параметром запроса, это приведет к 404 странице.Поэтому я хотел бы сделать перенаправление с помощью htaccess.Я попытался с соответствующим регулярным выражением шаблона URL, и он не перенаправляет.

Структура URL будет /detail/2019-12/news/news-title-12-2019.html?something и которую мне нужно перенаправить на /detail/2019-12/news/news-title-12-2019.html

Я пробовал что-то вроде этого, ноэто не перенаправление;

RewriteCond %{QUERY_STRING} .
RewriteRule ^detail/\d{4}-\d{2}/news/(?=\S*['-])([a-zA-Z0-9'-]+\.html)\?\S*$ %{REQUEST_URI}? [NC,L,R=301]

Как мне решить эту проблему?

Ответы [ 2 ]

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

Причина, по которой ваше правило не работает, заключается в том, что вы проверяете строку запроса ? в регулярном выражении своего правила.Шаблон RewriteRule предназначен только для URL-пути.

Следующее должно работать для вас

RewriteCond %{QUERY_STRING} .
RewriteRule ^detail/\d{4}-\d{2}/news/ %{RRQUEST_URI}? [L,R=301]

Обязательно очистите кеш браузера или используйте другой браузер для тестирования этого.

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

Этот RegEx может помочь вам написать свой RewriteRul:

^(.+\.html)(\?.+)$ 

enter image description here

Я не совсем уверен,но ваш код может выглядеть так:

RewriteCond %{QUERY_STRING} .
RewriteRule ^(.+\.html)(\?.+)$ http://domain_goes_here/$1 [NC,L,R=301]

RewriteCond %{QUERY_STRING} .
RewriteRule ^(.+\.html)(\?.+)$ http://domain_goes_here/$1 [NC,L,R=302]

Вам также может понадобиться:

  • перезапустить apache
  • удалить кеш браузера

Если вы хотите добавить границы к своему выражению, этот RegEx может помочь вам сделать это:

^(\/detail\/[0-9-]+\/news\/[a-z0-9-]+\.html)(\?.+)$

enter image description here

Код:

RewriteCond %{QUERY_STRING} .
RewriteRule ^(\/detail\/[0-9-]+\/news\/[a-z0-9-]+\.html)(\?.+)$ http://domain_goes_here/$1 [NC,L,R=301]

RewriteCond %{QUERY_STRING} .
RewriteRule ^(\/detail\/[0-9-]+\/news\/[a-z0-9-]+\.html)(\?.+)$ http://domain_goes_here/$1 [NC,L,R=302]
...