Tuesday, March 19, 2013

301 Редирект для ссылки с недопустимыми символами средствами .htaccess



Нужно перенаправить испорченную CodeIgniter ссылку с символами %C2%A0 на другой адрес через .htaccess

Для примера
http://mysite.com/some-page%C2%A0
нужно
http://mysite.com/other-page


Redirect   301    /some-page%C2%A0     /other-page   не сработал

Сдесь я нашел некий пример

RewriteCond   %{THE_REQUEST}   ^[A-Z]+\ /[^%?\ ]*\%
RewriteRule    ^. http://www.example.com/     [R=301,L]

Правило редиректит все ссылки с спес символами %..

Я попробовал следующее:

RewriteCond   %{THE_REQUEST}   some-page[^%?\ ]*\%
RewriteRule   ^.    /other-page [R=301,L]

Но при тесте, мне в новую ссылку началась добавляться старая ссылка как параметр, причем многократно, так как правило начало работать рекурсивно (потому что some-page опять встречался в новой ссылке ну уже как параметр, пресечь это не удалось):

http://mysite.com/index.php/other-page?/some-page/&... etc

После гуглинга я нашел это

и сменил чуть правило

RewriteRule   ^.   /other-page [R=301,L]
to
RewriteRule   .?   /other-page$1? [R=301,L]


Итак, чтобы сделать 301 редирект битой ссылки с спец символами % нужно примерно такое:

RewriteCond   %{THE_REQUEST}   some-page[^%?\ ]*\%
RewriteRule   .?  /other-page$1? [R=301,L]

Wednesday, September 26, 2012

Access to the associative array index in Smarty


<?php
$users = array();
$users[1] = array('fname' => 'John', 'lname' => 'Smith');
$users[2] = array('fname' => 'James', 'lname' => 'Bond');

$ids = array();
$ids[] = array('uid' => 1);
$ids[] = array('uid' => 2);

$smarty->assign('users', $users);
$smarty->assign('ids', $ids);
?>

{foreach item=user from=$ids}
    {$users[$user.uid].fname} {$users[$user.uid].lname}
{/foreach}

or

{foreach item=user from=$ids}
    {assign var=u_id value=$user.uid}
    {$users.$u_id.fname} {$users.$u_id.lname}
{/foreach}


Saturday, June 13, 2009

Обновление картинки без перезагрузки HTML страницы

Постановка задачи:
Картинка на странице подгружается с php скрипта.
Допустим пользователь изменил картинку которая хранится на сервере (например зааплодил новую с помощmю плагина Uploadify), нужно теперь без перезагрузки страницы обновить картинку с того самого php скрипта.

Похожие задачи:
При создании простенькой галереи, когда пользователь аплодит картинку и нужно эту картинку отобразить, или например при создании скрипта каптчи, или когда пользователь меняет логотип в своем профайле и т. д.

Так вот, приведу пример refresh картинки на jquery

код примерно такой:

<div id="img_container">
<img src="http://site.com/img.php?img_id=1" />
</div>

<input type="button" onclick="refresh_my_img();">

<script type="text/javascript">
function refresh_my_img()
{
time = new Date();
var rand = time.getTime();
var new_src = "http://site.com/img.php?img_id=1"+"&add_param="+rand;
$("#business_logo_img").empty();
var i = new Image();
i.src = new_src;
$("#business_logo_img").append(i);
}
</script>

В данном случае, удаляется тег img и создается новый с другим src.
ОСОБОЕ ВНИМАНИЕ хочу обратить на новый ресурс картинки, в url адрес добавился новый параметр add_param=rand где rand типа случайное уникальное число.
Это сделано для того, чтобы браузер не считал что адрес картинки старый.
Если бы мы для картинки просто подставили бы старый url (url того же php скрипта, который был до этого), то браузер посчитал бы что картинка старая, и не обновил бы её, а так, с помощью левого параметра, мы просто подставляем картинке уникальный новый url, это заставит браузер послать запрос на php скрипт, который в свою очередь вернет нам новую картинку. В самом же скрипте новый параметр обрабатывать не нужно.

Эта статья полезна для тех случаев, когда картинка возвращается php скриптом. (Не забывайте, что скрипт при выводе картинки должен выводить необходимые headers)