обрабатывать по-другому 2 похожих URL-адреса в htaccess apache

#.htaccess #url-rewriting

#.htaccess #url-переписывание

Вопрос:

Привет, ребята, мне нужна помощь с apache htaccess. У меня есть этот URL-адрес 2:

  • тест / ru / guns2 / beretta/
  • test / ru / 1564 / vibram-beretta-m9a3/

как я могу по-другому уловить эти 2 ситуации?

на самом деле у меня есть этот htaccess:

 RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_URI} !^/test/admin[NC]
RewriteCond %{REQUEST_URI} !^/test/(it|en) [NC]
RewriteRule ^(.*)$ /test/en/$1 [R=301,L,QSA]

RewriteRule ^([w-] )/([w-] )/(d )/([w-]*)$ /test/index.php?detMod=$3 [L,QSA,NC]
RewriteRule ^([w-] )/([w-] )/([w-] )/([w-]*)$ /test/index.php?page=$2amp;category=$3 [L,QSA,NC]
  

Но мне нужно другое правило для случая числа (1564) вместо (guns2)

Ответ №1:

Использовать d для сопоставления только чисел и использовать [w-] для сопоставления буквенно-цифровых символов, _ и - :

 ^([w-] )/([w-] )/(d )/([w-]*)$
  

и

 ^([w-] )/([w-] )/([w-] )/([w-]*)$
  

Предложил .htaccess:

 RewriteCond %{REQUEST_URI} !^/test/admin[NC]
RewriteCond %{REQUEST_URI} !^/test/(it|en) [NC]
RewriteRule ^(.*)$ /test/en/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^([w-] )/([w-] )/(d )/([w-]*)$ test/index.php?detMod=$3 [L,QSA,NC]
RewriteRule ^([w-] )/([w-] )/([w-] )/([w-]*)$ test/index.php?page=$2amp;category=$3 [L,QSA,NC]
  

Комментарии:

1. не работает, братан … с url test / en / 1564 / vibram-beretta-m9a3 / apache получите правило с буквенно-цифровыми символами вместо правила с цифрами

2. Просто помните, что правило с числами должно быть помещено перед другим правилом

3. Правила отлично работают на моем локальном хосте. Я добавил предлагаемые изменения в ваш .htaccess в моем ответе. Удачи!

4. Убедитесь, что вы правильно его тестируете. Я скопировал / вставил предложенные мной правила в свой локальный apahe, и все работало отлично