Не могу реализовать 301 редирект в htaccess с удалением символов

(Ответов: 6, Просмотров: 723)
  1. Студент
    • Регистрация: 06.04.2016
    • Сообщений: 34
    • Репутация: 3
    Всем привет! Имеется задача по переезду сайта (старый сайт на джумле, новый на processwire). Нужно реализовать 301 редиректы всех новостей на новый адрес: Все новости (порядка 10к шт) имеющие вид:

    oldsite.ru/index.php/novost.html ; old.site.ru/index.php/novost2.html и.т.д

    Нужно переадресовать на

    newsite.ru/news/1/novost ; newsite.ru/news/1/novost2 и.т.д

    т.е нужно вырезать из старых урлов который создала джумла - index.php и перенести все что после index.php на новый сайт в папку. В конце необходимо удалить .html

    Перерыл весь инет, нужных директив htaccess составить не могу
    • 0
  2. Студент
    • Регистрация: 06.04.2016
    • Сообщений: 34
    • Репутация: 3
    Попробовал составить:

    RewriteRule ^/index\.php/(.*) http://newsite.ru/news/ [R=301,L]
    и
    RewriteRule ^/index\.php/$ http://newsite.ru/news/ [R=301,L]

    вроде по правилам собрал верно, но по факту не редиректит
    • 0
  3. Quae res omnia Аватар для Coder
    • Регистрация: 29.01.2015
    • Сообщений: 821
    • Репутация: 299
    Можно и через htaccess заморочился, а можно и через PHP в точке входа - что угодно и как угодно, изящно и элегантно.
    • 0
  4. Студент
    • Регистрация: 06.04.2016
    • Сообщений: 34
    • Репутация: 3
    Цитата Сообщение от Coder Посмотреть сообщение
    Можно и через htaccess заморочился, а можно и через PHP в точке входа - что угодно и как угодно, изящно и элегантно.
    А подробней? Чтобы вырезал из урла необходимые символы
    • 0
  5. Студент
    • Регистрация: 06.04.2016
    • Сообщений: 34
    • Репутация: 3
    RewriteCond %{THE_REQUEST} ^.*/index\.php(.*)$

    RewriteRule ^(.*)index.php$ http://%{HTTP_HOST}/$1 [R=301,L]

    Должно работать но чет хз не хочет

    ---------- Сообщение добавлено 00:52 ---------- Предыдущее 00:47 ----------

    Ок пасоны упрощу задачу - а то сам с собой уже 3 дня обсуждаю

    Есть URL: oldsite.ru/index.php/novost.html нужно все что после index.php вырезать и передать на новый сайт. получится: newsite.ru/news/1/novost.html

    мозг уже сломал, должно работать а не хочет.
    p.s просто редирект урла целиком делаю без проблем. Может точно PHP применить?

    ---------- Сообщение добавлено 01:06 ---------- Предыдущее 00:52 ----------

    Вопрос. Кто знает как из урла с помощью PHP вырезать символы после последнего слеша и передать на новый сайт?
    /novost.html //novost.html вырезаем (последняя часть динамическая - строго буквы, цифры и тире)
    Последний раз редактировалось fortunatocat; 18.02.2018 в 22:55.
    • 0
  6. Студент
    • Регистрация: 06.04.2016
    • Сообщений: 34
    • Репутация: 3
    Решено! Может кому понадобится:

    PHP код:
    #Это мы размещаем в htaccess старого домена - вырезает index.php из середины URL
    RewriteEngine On 
    RewriteCond 
    %{THE_REQUEST} ^GET.*index\.php [NC]
    RewriteRule (.*?)index\.php/*(.*) http://newsite.ru/$1$2 [R=301,L] 
    PHP код:
    #Это мы размещаем на новом домене в файле htaccess - удаляет .html в конце URL
    RewriteEngine on
    RewriteBase 
    /
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.htmlHTTP
    RewriteRule 
    ^([^.]+)\.htmlhttp://newsite.ru/$1 [R=301,L]
    RewriteCond %{REQUEST_URI} !(\.[^./]+)$
    RewriteCond %{REQUEST_fileNAME} !-d
    RewriteCond 
    %{REQUEST_fileNAME} !-f
    RewriteRule 
    (.*) /$1.html [L
    • 0
  7. Студент Аватар для x64
    • Регистрация: 30.06.2011
    • Сообщений: 39
    • Репутация: 34
    • Webmoney BL: ?
    Постоянно пишу: внешний редирект должен быть раньше внутреннего. Но с завидной регулярностью появляются вопросы «почему». Да потому, что внешний редирект говорит браузеру: иди на такой-то адрес. А внутренний редирект сперва выполняется, а до внешнего дело и не доходит.
    Так и в «решении». Если правило подходит под редирект браузеру:
    Цитата Сообщение от fortunatocat Посмотреть сообщение
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
    RewriteRule ^([^.]+)\.html$ http://newsite.ru/$1 [R=301,L]
    далее ничего не выполняется (флаг L).
    • 0

Похожие темы

Темы Раздел Ответов Последний пост
Как сделать редирект .htaccess ?
Web программирование 4 29.03.2017 15:06
[HELP]Редирект htaccess и GET параметр
Web программирование 2 22.03.2014 08:36
Как сделать 301 редирект в .htaccess
Вопросы от новичков 8 01.11.2012 19:46
Редирект в .htaccess
Web программирование 6 21.06.2012 21:56
.htaccess редирект
Прочее 9 11.09.2009 21:48

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры