gormarket

gormarket
Рейтинг
47
Регистрация
29.12.2010

Если всего одно число, то Array(N) означает создание пустого массива из N элементов (каждый из которых имеет значение "undefined")

Выход из положения, передать это число как строку (заключить в кавычки)

visible_param(Array("1"));

Возможен вариант передачи любого количества аргументов (не одной строкой, а отдельными числами или строками через запятую)

visible_param(1,2,3,4,5,6);

или

visible_param(1);

Тогда функция будет такой

function visible_param()

{

for(var i=0; i < arguments.length; i++) {

var val = arguments;
var cont = document.getElementById(\'param_\' + val);
cont.style.display = \'!important\';
}
}

Вызывайте функцию так

visible_param(Array(1,2,3,4,5,6));

Или где-то создаете массив

var arrid = new Array(1,2,3,4,5,6);

а в нужный момент вызываете функцию, передавая его в качестве параметра

visible_param(arrid);

Невозможно при редиректе сохранить старый адрес не вставив его в новый урл, т.к. новый урл это единственный носитель, через который можно передать старый адрес.

Это справедливо и для php-редиректа (то что предложил Ragnarok) и для редиректа через .htaccess

Выглядеть это будет где-то так

RewriteRule ^старая_страница$ новая_страница?ref=$0 [L,R=301,QSA]

и получится "http://сайт/новая_страница?ref=старая_страница"

Есть правда надежда, что можно еще сделать это через cookie:

при редиректе через PHP сначала установить cookie со значением ref=старая_страница

и только потом сделать редирект на "http://сайт/новая_страница"

при редиректе через .htaccess тоже есть возможность установки cookie (добавление кроме флагов [L,R=301,QSA] еще и cookie [L,R=301,QSA,CO=ref:старая_страница:сайт], тогда добавлять в новый урл "?ref=старая_страница" не нужно.

А потом на новой странице из cookie получать источника реферера.

Но на практике назначение кук одновременно с редиректом делать мне не приходилось, нужно экспериментировать, может и получится.

Можно и при редиректе через .htaccess добавить в строку запроса прараметр "ref=старая_страница", а в PHP-коде страницы выдернуть содержимое этой переменной в качестве источника реферера

еще одно предложение:

попробуйте вынести вывод сообщения за пределы функции в setInterval

вместо

alert('OK');

использовать

setTimeout("alert('OK')", 100);

Или просто поменяйте местами две строки

сначала

clearInterval(socials.interval);

и только потом

alert('OK');

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

free-dev, попробуйте такой вариант ("or" вместо "||")

if(socials.myWin=='' or socials.myWin.closed)

Или еще так

if(socials.myWin)

вместо

if(socials.myWin != null)

DiAksID, есть пара поправок:

1. %{REQUEST_URI} не может содержать символ "?", это разделитель между %{REQUEST_URI} и %{QUERY_STRING} и не входит в эти переменные.

2. "%1\/" - это строка подстановки, а не регулярное выражение, и нет смысла экранировать здесь символы, имеющие специальное значение в регулярных выражениях.

И еще: каждые круглые скобки в регулярном выражении заставляют программу сохранять значение из этих скобок в переменной (типа %1,%2,$1,$2 и тому подобное). Может это требует незначительных ресурсов, но лучше не использовать скобки без необходимости.

Так что с учетом этого:


RewriteCond %{REQUEST_URI} ^.*/[^/.]+$
RewriteRule .* %0/ [R=301,L]

код редиректа рабочий, проверил на локальном сервере

сделал папку razdel, в ней папку 555-slovo3-110 и положил туда файл index.php

в корневом .htaccess сайта добавил строку

RewriteRule ^(razdel/[0-9]+)-slovo1-slovo2-(.*)$ $1-$2 [R=301,L]

и обратился по адресу

http://www.test.ru/razdel/555-slovo1-slovo2-slovo3-110

в результате был перенаправлен на

http://www.test.ru/razdel/555-slovo3-110/

Почему не работает у Вас - могут быть десятки причин

например адрес задан кирилицей (в этом случае вообще не знаю как делать редирект, не сталкивался)

или у Вас есть реальная папка "раздел" а в ней лежит свой .htaccess (тогда редирект нужно задавать там, пробовал дбавить .htaccess в папку "razdel", редирект из корневого .htaccess сразу переставал работать )

или вы добавляете правило редиректа слишком рано (в начало файла, до строки RewriteEngine On), или слишком поздно (после правила, которое уже преобразовало URL)

Если у Вас сайт корректно отображает уже преобразованный URL (вида http://www.сайт.ru/раздел/555-слово3-110 ), то можно сделать еще такую попытку: поставить код сразу после строк

RewriteEngine On

RewriteBase /

и в нем сделать назначение переменной (например RWR) при редиректе и проверку этой переменной в первых строках, чтобы выйти из .htaccess без дальнейших преобразований при повторном проходе, если преобразование уже сделано:


RewriteCond %{ENV:REDIRECT_RWR} ^yes$
RewriteRule .* - [L]

RewriteRule ^(раздел/[0-9]+)-слово1-слово2-(.*)$ $1-$2 [R=301,L,E=RWR:yes]

(не забудьте заменить русские слова в правиле их реальным значением латиницей)

===========

Добавлено позже

===========

У Вас на задано значение RewriteBase, поэтому в начало адреса добавляется физический путь на сервере

Либо добавьте строку

RewriteBase /

либо, если это неприемлимо, указывате полный путь при редиректе

RewriteRule ^.*/([0-9]+)-slovo1-slovo2-(.*)-([0-9]+)$ http://%{HTTP_HOST}/$1-$2-$3 [R=301,L]

Вот только в этом варианте у Вас теряется "razdel/", и будет

http://www.test.ru/555-slovo3-110/

Это Вы пытаетесь сделать редирект на http://www.сайт.ru/555-слово3-110, да и первый слеш не нужен

пробуйте так


RewriteRule ^(раздел/[0-9]+)-слово1-слово2-(.*)$ $1-$2 [R=301,L]

или так


RewriteRule ^(раздел/[0-9]+)-[^-]+-[^-]+-(.*)$ $1-$2 [R=301,L]

(если RewriteBase не задан, то перед $1 можно поставить слеш "/$1...")

AID_UA:
или дальнейшие правила перебрасывают на домен без ВВВ ?

Дальнейшие правила никак не могут перебросить на "на домен без ВВВ".

В приведенном фрагменте нет редиректов ниже добавленной строки, только реврайты, а они посетителю не видны.

Единственное объяснение, которое приходит в голову, это то что Вы заходите на

site.ru/tovar1/

и Вас перебрасывает на тот же домен (без www)

site.ru/tovar2/

Или может приведен не весь .htaccess

Попробуйте вместо Вашей одной строки использовать следующие две


RewriteCond %{HTTP_HOST} ^(www\.)?(.+)$ [NC]
RewriteRule ^tovar1/$ http://www.%2/tovar2/ [R=301,L]

В первой строке извлекается имя домена без www (не важно с www или без был запрос)

Во второй строке идет 301 редирект с "tovar1/" на "tovar2/" на домен с www

Или одной строкой, с указанием конкретного имени домена с www


RewriteRule ^tovar1/$ http://www.site.ru/tovar2/ [R=301,L]
Всего: 437