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);
}

Надеюсь это поможет.

Другие вопросы по тегам