URL RewriteRule - PullRequest
       10

URL RewriteRule

0 голосов
/ 19 января 2012

Я пытаюсь переписать свои URL, и у меня в htaccess есть следующее, где pageid - это идентификатор mysql для каждой страницы, а title - заголовок страницы.

RewriteRule ^([^/]*)/([^/]*)\.html$ content.php?pageid=$1&title=$2 [L]

Текущая структура URL, основанная на этом правиле: http://domian.com/3/Contact.html

И хотел бы изменить его на: http://domian.com/Contact.html

Также у меня есть функция php, которая меняет URL:

  function createPageLink($id)
  {
      global $db, $core;

      $sql = "SELECT id, slug FROM pages WHERE id = '".(int)$id."'";
      $row = $db->first($sql);

      $slug = $row['slug'];

      if ($core->seo == 1) {
          $display = $core->site_url . '/' . intval($id) . '/' . sanitize($slug) . '.html';
      } else {
          $display = $core->site_url . '/content.php?pageid=' . intval($id);
      }
      return $display;
  }

Таким образом, в основном удалите номер после URL и просто укажите только заголовок.

Я знаю, это довольно просто, но это сводит меня с ума. Спасибо

Ответы [ 3 ]

4 голосов
/ 19 января 2012

Вы ищете это,

RewriteRule ^([^/]*)\.html$ content.php?title=$1 [L]

Следующее будет соответствовать обоим.

RewriteRule ^([^\/]*)?/?([^\/]*)\.html$ content.php?pageid=$1&title=$2 [L]

При тестировании использовались следующие файлы.

<IfModule mod_rewrite.c>
    # Turn on URL rewriting
    RewriteEngine On

    RewriteBase /

    # Allow any files or directories that exist to be displayed directly
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    # Rewrite all other URLs to index.php/URL
    RewriteRule ^([^\/]*)?/?([^\/]*)\.html$ index.php?part1=$1&part2=$2 [L]
<IfModule mod_rewrite.c>

файл index.php для тестирования.

<?php
var_dump($_GET);
var_dump($_SERVER);
?>
1 голос
/ 19 января 2012

Ну, во-первых, вам нужно сделать несколько токенов для каждой страницы.Например: token Contact ссылается на идентификатор 1. Вы можете сделать это, например, с массивами или с switch.

Примером для PHP :

$token_ids = new array();
$token_ids['Home'] = 1;
$token_ids['Contact'] = 2;

$current_token = $_GET['title']; // following your example

if(!isset($token_ids[$current_token])) {
  // ERROR or REDIRECT like to home:
  $current_token = 'Home';
}

// similar to $_GET['pageid'] of example
$current_token_id = $tokens_id[$current_token];

Вы можете сделать это и на MySQL, просто вам нужно сохранить уникальный токен для каждой страницы.Нравится:

id | token     | page_title
1    Home        Hello!
2    Contact     Contact us!
0 голосов
/ 19 января 2012

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

RewriteRule ^(.*)\.html$ content.php?title=$1 [L]
...