jkm

Рейтинг
120
Регистрация
20.02.2014
vit_hol:

нужно сделать htaccess 301 редирект некоторых языковых версий на другой домен с аналогичной языковой версией:

https://www.site.com/de/ на https://site.net/de/
https://www.site.com/es/ на https://site.net/es/
https://www.site.com/xx/ на https://site.net/xx/
https://www.site.com/yy/ на https://site.net/yy/


RewriteCond %{HTTP_HOST} =www.site.com [NC]
RewriteRule ^(de|es|xx|yy)/.*$ https://site.net/$0 [R=301,L]

$page_source = preg_replace_callback('~<title>(.*?)</title>|(?=</head>)~si', 'renderTitle', $page_source, 1);

RewriteRule ^(?:(.*)/|)feed$ /$1 [L,R=301]

suffix, там вместо относительного адреса /$1$2 нужен полный адрес https://www.site.ru/$1$2

*NR*:
Sigmo#ID хоть в описании эта опция и есть, в реале оно работать не захотело вообще, начала выкидывать ответ "страница недоступна"

Там кроме замены флага L|last на N|next нужно ещё разделить работу на два правила.

Одно правило только заменяет и в случае успеха обьявляет переменную окружения.

Второе правило проверяет эту переменную и делает редирект.

RewriteRule ^([^_]*)_(.*) $1-$2 [N,E=FINISH:1]


RewriteCond %{ENV:FINISH} =1
RewriteRule ^(.*) /$1 [R=301,L]

За один раз правилами mod_rewrite можно заменить только какое-то фиксированное количество знаков.

RewriteCond $1-$2 ^(?|([^_]*)_(.*)|(.*)-(.*))

RewriteCond %1-%2 ^(?|([^_]*)_(.*)|(.*)-(.*))
RewriteCond %1-%2 ^(?|([^_]*)_(.*)|(.*)-(.*))
RewriteCond %1-%2 ^(?|([^_]*)_(.*)|(.*)-(.*))
RewriteRule ^([^_]*)_(.*) /%1-%2 [R=301,L]

Удобнее делать замену средствами PHP.

RewriteRule _ redirect.php [L]

redirect.php

<?php

header('Location:' . str_replace('_', '-', $_SERVER['REQUEST_URI']), true, 301);
jkm, еще Вы пропустили эти строчки, они точно не нужны?

Options +FollowSymLinks
RewriteBase /

Ну так до этого без них все номально работало.

jkm, спасибо за ответ.
По вашему коду редирект работает нормально, а исключение как то не так (мне кажется конфликтует с чем то):

С этого юрл:
http://www.stolicasveta.ru/1c.php

Редиректит сюда:
https://stolicasveta.ru/php5.4.cgi/1c.php

Тогда нужно поменять шаблон ^1c\.php$ на (^|\.cgi/)1c\.php$

RewriteRule (^|\.cgi/)1c\.php$ - [L]

RedirectMatch 301 ^/p(3660664)(?!\d)  /index.php?route=product/product&path=530869&product_id=$1

Если адресов много, то лучше направить их все на отдельный php скрипт который по id сформирует нужную ссылку и сделает редирект.

RewriteRule ^p(\d+) redirect.php?product_id=$1 [L]

Для исключения файла 1c.php добавьте сразу после RewriteEngine On строку:

RewriteRule ^1c\.php$ - [L]

В итоге должно получиться так:


<FilesMatch "\.md5$">
Deny from all
</FilesMatch>

DirectoryIndex index.php
Options -Indexes
# Comment the following line, if option Multiviews not allowed here
Options -MultiViews

<ifModule mod_rewrite.c>
RewriteEngine On

RewriteRule ^1c\.php$ - [L]

RewriteCond %{HTTP_HOST} ^www\.stolicasveta\.ru$ [NC]
RewriteRule ^(.*)$ https://stolicasveta.ru/$1 [R=301,L]

RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

# Uncomment the following line, if you are having trouble
#RewriteBase /

RewriteCond %{REQUEST_URI} !\.(js|css|jpg|jpeg|gif|png)$ [or]
RewriteCond %{REQUEST_URI} apple-touch-icon\.png$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
</ifModule>

<ifModule mod_headers.c>
<FilesMatch "\.(jpg|jpeg|png|gif|js|css)$">
Header set Cache-Control "max-age=3153600, public"
</FilesMatch>
</ifModule>

php_value log_errors 1
php_value error_log php-error.log

php_value max_execution_time 300
php_value memory_limit 32M

Action php5.4-script /cgi-bin/php5.4.cgi
AddType php5.4-script .php
AddDefaultCharset utf-8
AddType 'text/html; charset=utf-8' .html .htm .shtml

Если я правильно понял задачу, то должно быть как-то так:

location ~ ^/less/ipx/25623/((.*).doc)$ {

rewrite ^ /load/25623/url.hml?file=/less/ipx/25623/$1? break;
# а тут уже ваш proxy_pass
}
Всего: 749