Использование mod_rewrite для перенаправления 70+ URL-адресов с переменными - PullRequest
0 голосов
/ 24 октября 2009

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

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 или около того упомянутых являются единственными, которые я когда-либо буду иметь, поэтому я не хочу создавать легкодоступную базу данных. Я просто хочу, чтобы перенаправления работали с минимальными усилиями.

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

Ответы [ 2 ]

0 голосов
/ 25 октября 2009

В итоге я посоветовался с замечательными людьми из 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 голосов
/ 24 октября 2009

Я думаю, что более легкий способ (с точки зрения строк в файле .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 контента. 1006 *

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...