Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   htaccess 301й редирект и регулярка (https://javascript.ru/forum/server/51094-htaccess-301jj-redirekt-i-regulyarka.html)

BETEPAH 23.10.2014 23:28

htaccess 301й редирект и регулярка
 
Помогите, пожалуйста, не понимаю я синтаксиса htaccess'a...
Нужно перевести магазин с юкоза на опенкарт. Соответственно, ссылки поменяются с такого вида:
http://www.site.net/shop/2331/desc/a...skaja-albicija
на такой
http://site.net/akacija-lenkoranskaja-albicija.html
Написал так
Код:

RewriteRule ^shop/\d.*/desc/(.*)$ $1.html [R=301,L]
но не работает. Так тоже
Код:

RewriteRule ^shop\/\d.*\/desc\/(.*)$ $1.html [R=301,L]
Поправьте, где я не прав, плиз.
Вот весь код за вычитом комментариев:
Код:

AddDefaultCharset UTF-8
Options +FollowSymlinks
Options -Indexes
<FilesMatch "\.(tpl|ini|log)">
 Order deny,allow
 Deny from all
</FilesMatch>

RewriteEngine On

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteRule ^download/(.*) /index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

RewriteRule ^shop\/\d.*\/desc\/(.*)$ $1.html [R=301,L]


danik.js 23.10.2014 23:43

Может звездочка первая жадная? Там в регулярке точно точка не лишняя?

BETEPAH 23.10.2014 23:49

Цитата:

Сообщение от danik.js
Может звездочка первая жадная?

ну, без нее тоже не работает
Код:

RewriteRule ^\/desc\/(.*)$ http://site.net/$1 [L]
Тыкаю подряд найденные примеры в интернете, как слепой котенок, потому что тратить время на изучение вопроса, который возможно больше в жизни не понадобится, не хочется...

danik.js 23.10.2014 23:57

Цитата:

Сообщение от BETEPAH
ну, без нее тоже не работает

Ну дык я не говорил что ее убрать нужно ))

^shop\/\d*\/desc\/(.*)$ - разве не так должно быть?

BETEPAH 24.10.2014 00:02

Цитата:

Сообщение от danik.js
Ну дык я не говорил что ее убрать нужно

я понял, что имелось в виду. Но даже выкинув спорную часть, все равно не проходит.
И так тоже не редиректит
Код:

RewriteRule ^shop\/\d*\/desc\/(.*)$ http://site.net/$1 [L]

terminator-101 24.10.2014 04:14

Цитата:

Сообщение от danik.js
Может звездочка первая жадная?

Звездочка по определению жадная
Цитата:

Сообщение от danik.js
Там в регулярке точно точка не лишняя?

Точка там не лишняя, без точки это будет означать вообще чушь, хотя само подвыражение по хорошему, надо было бы записать \d+, потому что под его шаблон подпадает 2331/desc, 1jjjroror/desc, 1*:?),./desk, 1/desk и тп. Но дело все равно не в этом. Регулярка хоть и запредельно глупая, она все равно матчит нужные адреса
s="http://www.site.net/shop/2331/desc/akacija-lenkoranskaja-albicija"
re=/shop\/\d.*\/desc\/(.*)/
console.log(s.match(re))
//  [ 'shop/2331/desc/akacija-lenkoranskaja-albicija',
//    'akacija-lenkoranskaja-albicija',
//    index: 20,
//    input: 'http://www.site.net/shop/2331/desc/akacija-lenkoranskaja-albicija' ]
//

Дело в чем-то другом.

ЗЫ Помочь ничем не могу, синтаксис этого диалекта, и саму хрень не знаю.

Aetae 24.10.2014 06:02

http://htaccess.madewithlove.be/
Работает. Косяк где-то ещё.
Может хостинг чудить.

danik.js 24.10.2014 06:23

Может дело в www? Попробуй без www запросить адрес.

BETEPAH 24.10.2014 10:36

Записал эту строку выше
Код:

RewriteRule ^shop\/\d*\/desc\/(.*)$ /$1.html [L]
RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteRule ^download/(.*) /index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

и заработало. Загадка для меня. Буду благодарен, если кто-то объяснит
Всем спасибо!

danik.js 24.10.2014 16:30

Цитата:

Сообщение от BETEPAH
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

Это правило просто срабатывало раньше.


Часовой пояс GMT +3, время: 20:13.