Как реврайтом "вырезать" директории?

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем parempi, 7 янв 2009.

Статус темы:
Закрыта.
  1. parempi

    parempi Спецкор

    Регистр.:
    10 окт 2006
    Сообщения:
    157
    Симпатии:
    226
    Как правильно преобразовать все url на сайте такого вида:

    ***/1/2/***

    в такие:
    ***/***

    ?

    То есть, нужно вырезать две "лишние" директории, во всех ссылках:
    site.com/1/2/a.php реврайтится в site.com/a.php
    site.com/1/2/3/b.php в site.com/3/b.php

    и т.д.
     
  2. Zazil

    Zazil Постоялец

    Регистр.:
    18 окт 2007
    Сообщения:
    52
    Симпатии:
    39
    Не сильно конечно разбираюсь в mod_rewrite
    Уверен, что есть способ и получше, вот такой .htaccess получился

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !\.(php)$
    RewriteRule ^([^/]+)/([^/]+)/(.*).php$ /$3.php
     
    parempi нравится это.
  3. ewg777

    ewg777

    Регистр.:
    6 авг 2007
    Сообщения:
    763
    Симпатии:
    321
    :ay:Должно работать.
    Код:
    RewriteRule ^(.*)/(.*)/(.*).php(/?)+$ $3.php [L]
    RewriteRule ^(.*)/(.*)/(.*)/(.*).php(/?)+$ $3/$4.php [L]
    
     
    parempi нравится это.
  4. parempi

    parempi Спецкор

    Регистр.:
    10 окт 2006
    Сообщения:
    157
    Симпатии:
    226
    Спасибо, но оба варианта не работают ((
    Первый дает 500 ошибку Internal Server Error


    Ну и мне нужно не только с расширением .php реврайтить.
    Правило должно быть универсальным для всех случаев

    HTML:
    преобразовать
    ***/dir-a/dir-b/***
    
    в:
    ***/*** 
    Возможно такое? :)
     
  5. Zazil

    Zazil Постоялец

    Регистр.:
    18 окт 2007
    Сообщения:
    52
    Симпатии:
    39
    Тестил у себя все было ок. Не работает скорее всего из-за того, что не установлен модуль mod_rewrite
     
  6. ewg777

    ewg777

    Регистр.:
    6 авг 2007
    Сообщения:
    763
    Симпатии:
    321
    Код:
    RewriteEngine On
    RewriteBase /
    RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ /$1/$ [L]
    RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)$ /$1/$4 [L]
    
    ;)
     
  7. parempi

    parempi Спецкор

    Регистр.:
    10 окт 2006
    Сообщения:
    157
    Симпатии:
    226
    Я наверно задачу неправильно формулирую, и предложенные варианты поэтому не годятся. Попробую так сформулировать:

    Точное название директорий -

    abc/def/

    Url может быть такой:
    site.com/abc/def/111.php,

    такой:
    site.com/abc/def/222.html,

    такой:
    site.com/abc/def/all.aspx?y=2008

    и т.п.

    Всегда
    /abc/def/ (и только они!) должны заменяться на / , то есть чтобы на выходе получилось так:
    site.com/111.php,
    site.com/222.html,
    site.com/all.aspx?y=2008

    и т.п.

    Подскажите, как сделать оптимально? :)
     
  8. goodvin

    goodvin Человек-Волшебник

    Регистр.:
    27 июн 2006
    Сообщения:
    667
    Симпатии:
    687
    при запросе на сайте страницы site.com/111.php будет отдаватся страница site.com/abc/def/111.php

    так???

    Код:
     
    RewriteEngine On
    RewriteRule ^(.*)$ /abc/def/$1 [L]
     
    
     
  9. parempi

    parempi Спецкор

    Регистр.:
    10 окт 2006
    Сообщения:
    157
    Симпатии:
    226
    Да, должно быть так, но почему-то ни один из предложенных вариантов не работает (((

    Если кто-то в теме, и может помочь за оплату, просьба стукнуть в аську 4443938
     
  10. black.cat

    black.cat

    Регистр.:
    13 ноя 2008
    Сообщения:
    203
    Симпатии:
    32
Статус темы:
Закрыта.