Просьба помочь с 301 в htaccess

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем sergey_pets, 12 июн 2014.

  1. sergey_pets

    sergey_pets Создатель

    Регистр.:
    20 мар 2008
    Сообщения:
    41
    Симпатии:
    1
    Добрый день.

    Помогите, плз, есть масса URL-ов вида

    site.ru/productxxxx.html
    site.ru/productxxx.html
    где x-цифры

    Необходимо сделать 301-й редирект на

    site.ru/product/xxxx/ и
    site.ru/product/xxx/ соответственно.

    Заранее благодарен
     
  2. UJy

    UJy

    Регистр.:
    23 авг 2011
    Сообщения:
    364
    Симпатии:
    130
    Предположим, что сайт по адресу site.ru/product/xxxx/ открывается и цифер в адресе может быть от 1 до 4 подряд.
    Пробуем:
    Код:
    RewriteEngine on
    RewriteBase /
    
    RewriteCond %{REQUEST_URI} product[\d]{1,4}\.html
    RewriteRule product([\d]{1,4})\.html /product/$1 [R=301,L]
    
    Предположим, что сайт по адресу site.ru/product/xxxx/ НЕ открывается и цифер в адресе может быть от 1 до 4 подряд.
    Пробуем:
    Код:
    RewriteEngine on
    RewriteBase /
    
    RewriteCond %{REQUEST_URI} product[\d]{1,4}\.html
    RewriteRule product([\d]{1,4})\.html /product/$1 [R=301,L]
    
    RewriteCond %{REQUEST_URI} product/[\d]{1,4}/$
    RewriteRule product/([\d]{1,4})/$ /product$1.html [QSA,L]
    
     
    sergey_pets нравится это.
  3. sergey_pets

    sergey_pets Создатель

    Регистр.:
    20 мар 2008
    Сообщения:
    41
    Симпатии:
    1
    Не работает, кажется какие-то из строк исключают друг друга

    Это то, что сейчас там прописано

    Код:
    RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
    RewriteRule . %1/%2 [R=301,L]
    
    RewriteRule ^([0-9a-zA-Z]+).html$ / [QSA,NE,L]
    
    
     ErrorDocument 404 404.html
    
    #shop
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteRule ^shop/(repo_themes|js|3rdparty|images_common|products_pictures|images|themes|css)/(.*)$ published/SC/html/scripts/$1/$2?frontend=1 [L]
    
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteRule ^shop/(imgval.php|wbs_messageserserver.php) published/SC/html/scripts/$1 [L]
    
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteRule ^(repo_themes|js|3rdparty|images_common|products_pictures|images|themes|css)/(.*)$ published/SC/html/scripts/$1/$2?frontend=1 [L]
    
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteRule ^(imgval.php|wbs_messageserserver.php|get_file.php) published/SC/html/scripts/$1 [L]
    
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteCond  %{REQUEST_FILENAME} !-d
    RewriteRule ^shop(.*) published/SC/html/scripts/$1&frontend=1 [L]
    
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteCond  %{REQUEST_FILENAME} !-d
    RewriteRule ^photos/(album|view)/(.*) photos/index.php?q=$1/$2 [L,QSA]
    
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteCond  %{REQUEST_FILENAME} !-d
    RewriteRule ^photos/fullsize/(.*)/(.*) photos/getfullsize.php?filename=$1&hash=$2 [L,QSA]
    
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteCond  %{REQUEST_FILENAME} !-d
    RewriteRule ^photos/(.+)$ photos/index.php?q=$1 [L,QSA]
    
    #common
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteRule ^login/(.*) login/index.php [L]
    
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteRule ^installer/(.*) installer/index.php [L]
    
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteCond  %{REQUEST_FILENAME} !-d
    RewriteRule ^published/$ published/index.php [L]
     
    Последнее редактирование модератором: 21 июн 2014
  4. UJy

    UJy

    Регистр.:
    23 авг 2011
    Сообщения:
    364
    Симпатии:
    130
    Это правило опусти в самый низ файла. Мои правила поставь поближе к началу файла...
    Как пример:
    Код:
    RewriteEngine on
    RewriteBase /
    
    RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
    RewriteRule . %1/%2 [R=301,L]
    
    RewriteCond %{REQUEST_URI} product[\d]{1,4}\.html
    RewriteRule product([\d]{1,4})\.html /product/$1 [R=301,L]
    
    RewriteRule ^([0-9a-zA-Z]+).html$ / [QSA,NE,L]
    
    ErrorDocument 404 404.html
    
    #shop
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteRule ^shop/(repo_themes|js|3rdparty|images_common|products_pictures|images|themes|css)/(.*)$ published/SC/html/scripts/$1/$2?frontend=1 [L]
    
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteRule ^shop/(imgval.php|wbs_messageserserver.php) published/SC/html/scripts/$1 [L]
    
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteRule ^(repo_themes|js|3rdparty|images_common|products_pictures|images|themes|css)/(.*)$ published/SC/html/scripts/$1/$2?frontend=1 [L]
    
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteRule ^(imgval.php|wbs_messageserserver.php|get_file.php) published/SC/html/scripts/$1 [L]
    
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteCond  %{REQUEST_FILENAME} !-d
    RewriteRule ^shop(.*) published/SC/html/scripts/$1&frontend=1 [L]
    
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteCond  %{REQUEST_FILENAME} !-d
    RewriteRule ^photos/(album|view)/(.*) photos/index.php?q=$1/$2 [L,QSA]
    
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteCond  %{REQUEST_FILENAME} !-d
    RewriteRule ^photos/fullsize/(.*)/(.*) photos/getfullsize.php?filename=$1&hash=$2 [L,QSA]
    
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteCond  %{REQUEST_FILENAME} !-d
    RewriteRule ^photos/(.+)$ photos/index.php?q=$1 [L,QSA]
    
    #common
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteRule ^login/(.*) login/index.php [L]
    
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteRule ^installer/(.*) installer/index.php [L]
    
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteCond  %{REQUEST_FILENAME} !-d
    RewriteRule ^published/$ published/index.php [L]
    


    PS: там точно трех и четырехзначные цифры в адресе? Или может быть любое количество символов?
     
    Последнее редактирование модератором: 21 июн 2014
    sergey_pets нравится это.
  5. sergey_pets

    sergey_pets Создатель

    Регистр.:
    20 мар 2008
    Сообщения:
    41
    Симпатии:
    1
    Огромное спасибо, работает, а то, что
    RewriteRule ^([0-9a-zA-Z]+).html$ / [QSA,NE,L]
    перенес ниже, мне ничего не поломает?
     
  6. ARCOS_MSK

    ARCOS_MSK

    Регистр.:
    25 мар 2010
    Сообщения:
    150
    Симпатии:
    22
    Не поломает, все будет ок, правило все равно будет выполняться.
     
  7. virhack

    virhack Создатель

    Регистр.:
    5 фев 2013
    Сообщения:
    33
    Симпатии:
    8
  8. shkiper

    shkiper

    Регистр.:
    16 ноя 2008
    Сообщения:
    302
    Симпатии:
    18
    Всем привет.

    Меняю cms, c SSpremium на SS5, теперь будет присутствовать ЧПУ, в связи с этим, нужно сделать 301, планирую вручную прописать для всех категорий и товаров.

    Игрался сегодня целый день, но, что-то без результатов (
    были
    категории - index.php?categoryID=11
    товары - index.php?productID=105
    будет:
    категория - /category/dreli/
    товар - /otvertka/

    .htaccess

    Options +FollowSymlinks
    RewriteEngine on
    rewriterule ^index.php?categoryID=11 http://site.com/category/dreli/ [r=301,nc]
    rewriterule ^index.php?productID=105 http://site.com/otvertka/ [r=301,nc]

    как надо правильно?
    спс
     
    Последнее редактирование: 20 фев 2015
  9. amber128

    amber128 Создатель

    Регистр.:
    10 май 2007
    Сообщения:
    36
    Симпатии:
    2
    RewriteRule ^catalog/drel/ index.php?categoryID=11 [r=301,nc]
    RewriteRule ^tovar-zoom-([0-9]+).html/? index.php?productID=$1 [r=301,nc]

    товары ссылка из этого вида index.php?productID=105 в http://site/tovar-zoom-105.html
     
  10. shkiper

    shkiper

    Регистр.:
    16 ноя 2008
    Сообщения:
    302
    Симпатии:
    18
    to amber128
    вроде сначала надо указывать старый адрес, а потом новый, на который пересылает.

    Я уже составил табличку со старыми и новыми адресами (поэтому, условия с вариациями, вроде как не нужны), теперь вроде, только осталось красиво это объединить, но вот как это правильно сделать, загвоздка.

    Если у меня пока нет этих новых страниц, меня же всё равно перенаправит по условию?