2009-10-24 3 views
0

Я создаю веб-сайт, но порядок главы значительно изменился. Я вручную написал преобразование для себя в такой форме, как это:Использование mod_rewrite для перенаправления 70 + URL-адресов с переменными

36 -> 26,1

37 -> 28

38 -> 28,1

39 -> 29

40 -> 30

41 -> 30.1

В основном, следуя этому руководству, я хочу преобразовать все URL-адреса, например http://www.domain.com/view.php?chapter=38, в более новый вид, например http://www.domain.com/c28.1.

Я также хочу, чтобы те, кто запрашивал номер страницы, например, view.php?chapter=38&page=4, перешли на переадресацию, так: c28.1/p4.html.

Это может показаться довольно простым, за исключением того, что у меня есть 70 или около того из них для реализации, и я немного волнуюсь, если это значительно ухудшает производительность сайта (70-ти много ...?) И не может получить комикс и для правильной перезаписи.

Так что мой вопрос: как мне это достичь, каково мое лучшее решение? Если производительность не проблема, я бы предпочел сохранить ее в .htaccess с моим другим кодом mod_rewrite, но если единственный разумный способ сделать это - написать скрипт .php и вызвать его для перенаправления, я могу это сделать - хотя я действительно не знаю, как заставить PHP делать это.

Пожалуйста, имейте в виду, что упомянутые выше 70 из них являются единственными, которые мне когда-либо были, поэтому я не хочу создавать легкодоступную базу данных. Я просто хочу, чтобы перенаправления работали с минимальной суматохой.

Буду благодарен за любой ответ. Спасибо заранее, если кто-нибудь может помочь мне понять это.

ответ

0

Я закончил консультации с замечательными людьми freenode #httpd и получил решение. Для меня, поскольку я только хочу поймать запросы для view.php, я обнаружил, что он работал, чтобы просто написать сценарий view.php, который собирал вещи из массива. Нет необходимости в mod_rewrite. Сценарий, который я использую, выглядит так:

<? 

$chapters = array(
    // old => new 
    1 => 2, 
    2 => 3, 
    3 => 4, 
    10 => 21 
); 

if (! isset($_GET['chapter']) || ! isset($chapters[$chapter = (int)$_GET['chapter']])) { 
    header('HTTP/1.1 404 Not Found'); 
    echo 'Page Not Found'; 
    exit; 
} 

$url = '/c' . $chapters[$chapter]; 
if (isset($_GET['page'])) 
    $url .= '/p' . $_GET['page'] . '.html'; 

header('Location: ' . $url, 301); 

?> 

Спасибо за вашу помощь, однако, gh3.

0

Я думаю, более легкий путь (в терминах строк внутри файла .htaccess) до подхода заключается в том, как вы упомянули, использовать .htaccess для обработки URL-адресов, как:

RewriteRule ^c([0-9]+)$ view.php?chapter=$1 
RewriteRule ^c([0-9]+).([0-9]+)$ view.php?chapter=$1&section=$2 
RewriteRule ^c([0-9]+).([0-9]+)/p([0-9]+).html$ view.php?chapter=$1&section=$2&page=$3 

А затем сопоставить их к php, который будет обрабатывать одно содержимое.

Я могу предложить вам, что вам также нужно было бы переписать rewriterule с 301 переадресацией всех старых URL-адресов, чтобы люди, которые пришли из серва поисковой системы, перенаправлялись на правый новый URL-адрес контента.

Надеюсь, это поможет.

+0

О, у меня уже есть такая часть.Чтобы уточнить, старые URL-адреса выглядели как 'view.php? Chapter = 1 & page = 3' \' view.php? Chapter = 1', в которых не использовалась обманка mod_rewrite, а новые URL-адреса (в формате 'c1/p1.html' фактически переадресовываем в 'viewer.php? chapter = 1 & page = 1'. Я добавил« er »в конце нового сценария сценария комикса, чтобы немного смутить, поскольку я планировал сделать эту большую карту в будущее. Ваш код выше выглядит как код, который позволяет использовать более симпатичные URL-адреса '/ c1/p1.html', и у меня его уже есть. Так что это действительно не решает мою проблему. – SuitCase

Смежные вопросы