htaccess - удалите .jpg из конца URL, затем обработайте все правила перезаписи - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь создать некоторые правила перезаписи URL, которые получат этот URL:

https://example.com/abc/123.jpg

И переписать на следующий URL:

https://example.com/?p=abc&u=123

Так и будет:

  1. Игнорировать ".jpg"
  2. Установить значение после первого "/" как p param
  3. Установить значениепосле второго "/" как u param

Для # 2 и # 3 у меня есть это (и это прекрасно работает):

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ ?p=$1 [QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/$ ?p=$1 [QSA]

RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ ?p=$1&u=$2 [QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ ?p=$1&u=$2 [QSA]

Однако, когда у меня есть ".jpg"в конце URL я получаю ошибку apache" Not Found ".

Кто-нибудь знает, какое правило мне нужно добавить в .htaccess, чтобы в этом случае игнорировать" .jpg "?

Спасибо!

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Вы должны будете сделать последний .jpg или .jpeg необязательным в конце.Вы можете использовать эти 2 правила:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)(?:\.jpe?g|/)?$ ?p=$1 [L,NC,QSA]

RewriteCond %{REQUEST_FILENAME} !-d    
RewriteRule ^([\w-]+)/([\w-]+)(?:\.jpe?g|/)?$ ?p=$1&u=$2 [L,NC,QSA]

Обратите внимание, что \w эквивалентно [a-zA-Z0-9_].

0 голосов
/ 23 сентября 2019

Вы можете добавить .jpg к каждому правилу, чтобы соответствовать только .jpg окончанию URL

RewriteRule ^([a-zA-Z0-9_-]+)\.jpg$ ?p=$1 [QSA]
RewriteRule ^([a-zA-Z0-9_-]+)\.jpg/$ ?p=$1 [QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)\.jpg$ "?p=$1&u=$2" [QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)\.jpg/$ ?p=$1&u=$2 [QSA]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...