Перезапись URL для изображений с разных доменов - PullRequest
4 голосов
/ 21 июля 2011

Я хочу использовать URL-адреса, подобные следующим:

http://mydomain.com/320x200/server/path/to/my/image.jpg

Где вы можете найти 3 параметра для извлечения для перезаписи:

  1. 320x200: необязательный параметр, может быть двумя числами (например, «320x200»), ИЛИ одним числом (например, «320x») ИЛИ пустым (только «x»)
  2. server: обязательно (это конкретный параметрнайти сервер, на котором размещено изображение, но в данном случае это не имеет значения)
  3. path/to/my/image.jpg: требуется

и переписать его с другим доменом, как показано ниже:

http://myotherdomain.com/320/200/server/path/to/my/image.jpg

Я пробовал следующие правила перезаписи, но он не работает:

RewriteRule ^([0-9]+)x([0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9/.]+)$ htp://myotherdomain.com/$1/$2/$3/$4 [L]

RewriteRule ^([0-9]+)x/([a-zA-Z0-9]+)/([a-zA-Z0-9/.]+)$ htp://myotherdomain.com/$1/$2/$3 [L]

RewriteRule ^x/([a-zA-Z0-9]+)/([a-zA-Z0-9/.]+)$ htp://myotherdomain.com/$1/$2 [L]

Почему он не работает?

3 regex работают при тестировании через такой сайт, как regexplanet.com

Я пытался очистить кеш браузера,перезапустите Apache, удалите куки, ... все еще не работает!

Спасибо за вашу помощь


Редактировать:

Наконец, pпроблема была в том, что мой файл .htaccess не был правильно сохранен (не знаю почему).

Я просто закрыл и снова открыл .htaccess, все в порядке!

Ответы [ 2 ]

3 голосов
/ 21 июля 2011

Вы должны разделить работу по группам. Не беспокойтесь о преобразовании x в /, только не перехватывайте его.

RewriteRule ^([0-9]+)x([0-9]+/)([a-zA-Z0-9]+)/([a-zA-Z0-9/.]+)$ http://myotherdomain.com/$1/$2$3/$4 [L]

RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9/.]+)$ http://myotherdomain.com/$1/$2 [L]
  • ([0-9]+) фиксирует параметры двух ваших разрешений индивидуально.
  • (?:....)? - это необязательная группировка, отображаемая необязательно.

Edit:

Опциональность - ловушка. Не используйте это -> второе правило.

Если другой домен окажется тем же доменом:

RewriteCond %{REQUEST_URI} ![0-9]+/[0-9]+.*$

предотвратит петли.

0 голосов
/ 21 июля 2011

Я не пробовал, но надеюсь, что это работает:

RewriteRule ^(([0-9]+)(x)([0-9]+)/|)([a-zA-Z0-9]+)\/([a-zA-Z0-9_\/\.-]+)$ htp://myotherdomain.com/$2$3$4$5$6/$7 [L]
$2 = 320 or empty
$3 = 'x' or empty
$4 = 200 or empty
$5 = '/' or empty
$6 = 'server'
$7 = path to image
...