URL разделения лака и изменение URL
Есть ли способ разделить URL на лак или изменить структуру URL с ним.
я знаю regsub
или же regsuball
поддержать это, но они не достаточно в моем случае.
Я хотел бы изменить URL-адрес и перенаправить его на другой домен.
Например:
http://aaa.test.com/sport/99244-article-hyun-jun-suku-kapa.html?
перенаправить ниже адрес
http://m.test.com/article-hyun-jun-suku-kapa-sport-99244/
Я добавил несколько строк в файл vcl, чтобы сделать это
set req.http.xrul=regsuball(req.url,".html",""); "clear .html"
set req.http.xrul=regsub(req.http.xrul,"(\d+)","\1"); find numbers --article ID =99244
Я могу избавиться от идентификатора статьи с
set req.http.xrul=regsub(req.http.xrul,"(\d+)","");
но не может получить только идентификатор статьи
set req.http.xrul=regsub(req.http.xrul,"(\d+)","\1"); or any other method
Разбивает ли поддержка лака URL с шаблоном "-", чтобы я мог изменить дизайн URL? Или мы можем получить только article ID с regsub
?
1 ответ
Это то, что вы хотите достичь?
set req.http.X-Redirect-URL = regsuball(req.url,"^/([^/]*)/([0-9]+)-([^/]+)\.html$","http://m.test.com/\3-\1-\2");
Это рабочий код с учетом предоставленного вами примера, всего один уровень размещения разделов.
Если вы хотите поддерживать больше уровней секций, вам нужно лишь немного откорректировать регулярное выражение и заменить / на - на втором шаге:
set req.http.X-Redirect-URL = "http://m.test.com/" + regsuball(regsuball(req.url, "^/(.*)/([0-9]+)-([^/]+)\.html$", "\3-\1-\2"), "/", "-");
Может быть, вам нужно еще одно уточнение. Что если URL не соответствует вашему шаблону? X-Redirect-URL будет иметь то же значение, что и req.url. Вам определенно не нужен цикл перенаправления, поэтому я предлагаю добавить символ метки в начало X-Redirect-URL и затем проверить его.
Скажем так:
set req.http.X-Redirect-URL = regsuball(regsuball(req.url, "^/(.*)/([0-9]+)-([^/]+)\.html$", "#\3-\1-\2"), "/", "-");
if(req.http.X-Redirect-URL ~ "^#") {
set req.http.X-Redirect-URL = regsuball(req.http.X-Redirect-URL, "#", "http://m.test.com/");
return(synth(391));
} else {
unset req.http.X-Redirect-URL;
}
и для всех случаев вам нужно в vcl_synth:
if (resp.status == 391) {
set resp.status = 301;
set resp.http.Location = req.http.X-Redirect-URL;
return (deliver);
}
Надеюсь это поможет.