Как автоматизировать определение перенаправлений .htaccess на основе контента - PullRequest
2 голосов
/ 08 декабря 2011

Я использую

grep -HEri "Title\:(content)" ./www.livesite.com/ > Livesite.txt

и

grep -HEri "Title\:(content)" ./www.devsite.com/ > Devsite.txt 

чтобы найти пары путей, которые имеют совпадающее или похожее содержимое, которое я могу указать с помощью регулярного выражения. Когда содержимое из ^/example_found_live_path.html совпадает с содержимым в ^/different/found_devsite_path, я хочу добавить строку в файл .htaccess сайта разработчика, создав перенаправление 301 с пути действующего сайта на путь, найденный на сайте разработчика, который выглядит следующим образом :

redirect 301 ^/example_live_path.html ^/different/devsite_path

Желаемый результат заключается в том, что при запуске все записи поисковой системы и ссылки на страницы с текущего сайта в реальном времени перенаправляются на страницы с соответствующими заголовками на сайте разработчика. Я чувствую, что это работа для sed, grep и xargs, но не знаю, как структурировать команду. Это как:

grep -HEri "Title\:(content)" ./www.livesite.com/ | xargs 'echo %1; grep -HEri %2 ./www.devsite.com' | xargs 'sed "$a\nredirect 301 \^%1 \^%2\n' .htaccess

Заранее спасибо!

1 Ответ

0 голосов
/ 31 мая 2012

Вы уже получили два списка файлов, выполнив:

grep -HEri "Title\:(content)" ./www.livesite.com/ > Livesite.txt
grep -HEri "Title\:(content)" ./www.devsite.com/ > Devsite.txt 

и получили: (может быть несколько совпадений для каждого найденного файла)

(Livesite.txt)
./www.livesite.com/foo/bar1.xhtml:...Title:(content1)........1a
./www.livesite.com/foo/bar1.xhtml:......Title:(content3)........1b
./www.livesite.com/goo/car.xhtml:....Title:(content4)........1c
...

(Devsite.txt)
./www.devsite.com/bar_dev.html:......Title:(content2)...2a
./www.devsite.com/far_zoo.html:...Title:(content4).........2b
./www.devsite.com/far_zoo.html:...Title:(content3).........2c
...

Результат объединения должен быть:

1a - null
1b - 2c
1c - 2b
null - 2a

Вот скрипт для внутреннего объединения двух списков с соответствующим содержимым:

while IFS=: read livepath line1; do
    matching1="${line1#*Title:(}"
    matching1="${matching1%)*}"

    matched=0
    matched_devpath=
    while IFS=: read devpath line2; do
        matching2="${line2#*Title:(}"
        matching2="${matching2%)*}"
        if [ "$matching1" = "$matching2" ]; then
            matched=1
            matched_devpath="$devpath"
            break
        fi
    done <Devsite.txt

    if [ "$matched" = 1 ]; then
        url1="${livepath#./www.livesite.com}"
        url2="${devpath#./www.devsite.com}"
        echo "301 ^$url1 ^$url2"
    fi
done <Livesite.txt

, и результат должен быть:

redirect 301 ^/foo/bar1.html ^/far_zoo.html
redirect 301 ^/goo/car.html ^/far_zoo.html

Umm.. удачи!

...