2012-01-19 2 views
0

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

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-адреса и просто укажите только заголовок.

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

+0

Возможно, вам больше не нужно, или он должен быть жестко закодирован в переписывании? –

+0

Нет Мне больше не нужен идентификатор страницы, как ненужный ... он просто появился с CMS. – Dony

ответ

4

Вы ищете это,

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); 
?> 
+0

Нет, это не сработает. – Dony

+0

@ Dony Я протестировал его. –

+0

У меня это так .... она должна идти внутри этого или снаружи \t RewriteEngine На RewriteBase/ RewriteRule^([^ /] *)/([^ /] *) \ .html $ content.php? pageid = $ 1 & title = $ 2 [L] Dony

1

Ну, сначала вам нужно сделать несколько токенов для каждой страницы. Например: токен Обратитесь к id 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

Я уже это сделал. Я просто пытаюсь удалить идентификатор, хотя и его чище. – Dony

+0

Вы хотите перенаправить /3/Contact.html в /Contact.html? Или просто принять /Contact.html вместо /3/Contact.html? –

+0

Да держать /Contact.html .... Я не хочу ID – Dony

0

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

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

Нет Мне не нужен идентификатор вообще, но я пробовал ваше решение и не работал. – Dony

+0

Мне нужно удалить все идентификаторы, а затем применить это правило? – Dony

+0

@Dony Есть ли запросы клиентов, включая идентификатор или нет? Если они вам не нужны, удалите их - и тогда это должно работать – Izkata