Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Преобразование url и mod_rewrite
 
 автор: Ru   (31.10.2007 в 11:07)   письмо автору
 
 

Подскажите, как сделать url такого вида: /click?url=http://site.ru
из такого /index.php?mod=click&url=http://site.ru

Делаю так:


<?php 

$in 
= array("'index.php\?mod=click&url=([0-9a-zA-Z_-]*)'"); 
$out = array("click?url=\\1"); 
preg_replace($in$out$url

?> 


Правило для .htaccess:
RewriteRule ^click?url=([0-9a-zA-Z_-]*)$ index.php?mod=click&url=$1

Не получается.

   
 
 автор: Faraon   (31.10.2007 в 11:32)   письмо автору
 
   для: Ru   (31.10.2007 в 11:07)
 


<?php
$url
="index.php?mod=click&url=www.site.ru";
$in "|index.php\?mod=click&url=([0-9a-zA-Z\._-]*)|";
$out "click?url=\\1";
print 
preg_replace($in$out$url);
?>

   
 
 автор: Ru   (31.10.2007 в 12:05)   письмо автору
 
   для: Faraon   (31.10.2007 в 11:32)
 

>

><?php
>$url="index.php?mod=click&url=www.site.ru";
>
$in "|index.php?mod=click&url=([0-9a-zA-Z._-]*)|";
>
$out "click?url=\1";
>print 
preg_replace($in$out$url);
>
?>
>


Преобразование работает, но что-то не работает правило для .htaccess:

RewriteRule ^click?url=([0-9a-zA-Z\._-]*)$ index.php?mod=click&url=$1


Показывает 404 ошибку и не работает переадресация на сам сайт, в адресной строке так и остается http://site1.ru/click?url=http://site.ru

В этом виде переадресация работает http://site1.ru/index.php?mod=click&url=http://site.ru

   
 
 автор: EXP   (31.10.2007 в 23:21)   письмо автору
 
   для: Ru   (31.10.2007 в 12:05)
 


RewriteRule ^click?url=([0-9a-zA-Z\._\-\:\/]*)$ index.php?mod=click&url=$1

   
 
 автор: Ru   (01.11.2007 в 13:41)   письмо автору
 
   для: EXP   (31.10.2007 в 23:21)
 

Не работает.
Вот код:
index.php

<?php

ob_start
();

function 
main() {
    echo 
"<a href=\"index.php?mod=click&amp;url=http://softtime.ru\" target=\"_blank\">Softtime</a>";
}

function 
click() {
    
$url = ($_GET['url']);
    
header("Location: ".$url."");
}

if (
$_GET['mod'] == "click") {
    
click();
} else {
    
main();
}

function 
replace_text(&$url) {
    
$in = array("|index.php\?mod=click&amp;url=([0-9a-zA-Z\._\-\:\/\/]*)|");
    
$out = array("click?url=\\1"); 
    
$url preg_replace($in$out$url);
    return 
$url;
}

$text ob_get_contents();
ob_end_clean();
echo 
replace_text($text);

?>

.htaccess

RewriteEngine on
RewriteRule ^.htaccess$ - [F] 

RewriteRule ^click?url=([0-9a-zA-Z\._\-\:\/]*)$ index.php?mod=click&url=$1

   
 
 автор: EXP   (01.11.2007 в 15:57)   письмо автору
 
   для: Ru   (01.11.2007 в 13:41)
 

что-то я тоже не смог подружить модРеврайт с гет
можно проще сделать и так
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteRule ^click\/([0-9a-zA-Z\.\-]+?)\/?$ ?mod=click&url=$1

только наверное надо как-то ещё проверять что не должны подсунуть в $url

<?php 

ob_start
(); 

function 
main() { 
    echo 
"<a href=\"/click/softtime.ru\" target=\"_blank\">Softtime</a>"


function 
click() { 
    
$url 'http://' $_GET['url'] ; 
    
header("Location: "$url ); 


if (@
$_GET['mod'] == "click") { 
    
click(); 
} else { 
    
main(); 


ob_end_flush(); 
?>

не пойму для чего функция replace_text,
и у меня почемуто работает только с ob_end_flush();

   
 
 автор: Ru   (01.11.2007 в 16:36)   письмо автору
 
   для: EXP   (01.11.2007 в 15:57)
 

Большое спасибо!
Значит так и сделаю.

   
 
 автор: Unkind   (01.11.2007 в 17:03)   письмо автору
 
   для: Ru   (01.11.2007 в 16:36)
 

> RewriteRule ^click?url=([0-9a-zA-Z\._\-\:\/]*)$ index.php?mod=click&url=$1
Так писать нельзя. Это можно заменить на что-то вроде

RewriteCond %{QUERY_STRING} ^url=([0-9a-zA-Z._:/-]*)$
RewriteRule ^click$ index.php?mod=click&url=$1

   
 
 автор: Ru   (02.11.2007 в 10:25)   письмо автору
 
   для: Unkind   (01.11.2007 в 17:03)
 

Спасибо заработало!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования