Перезапись URL: с «index.php? Id = 5» на «home.html» - PullRequest
3 голосов
/ 19 февраля 2010

Я разрабатываю сайт, используя php и класс "template.inc". Проблема заключается в том, что я хочу создать мини-cms, которая позволяет администратору создавать "html" -страницу с такими атрибутами mysql:

Table Name : Page
-----------------
id   :auto-icremented) 
name :varchar

В архитектуре, если он создал страницу с номером "5", URL-адрес будет

"ww.mywebsite.com/index.php?id=5".

Но это не очень эстетично, так как я очень плохо переписываю URL, даже если я читаю много уроков, я хочу ввести имя + "html" для доступа к странице.

Если мы возьмем пример

"www.mywebsite.com/index.php?id=5"

, если администратор создал страницу со следующими значениями:

id   : 5
name : 'home'

я хочу, чтобы пользователь мог набрать

"www.mywebsite.com/home.html" 

и без перенаправления, так как я хочу, чтобы этот последний URL все еще появлялся и становился официальным URL.

Спасибо за ваш ответ, я знаю, как переписать www.mywebsite.com/index.php?id=5 на www.mywebsite.com/5.html ... но проблема в том, что я хочу, во-первых, сначала получить имя "name" и в моем примере значение имени «home» (5 => «home»). Как я могу получить доступ к своей базе данных с помощью механизма перезаписи URL?

Большое спасибо, С уважением.

Ответы [ 3 ]

5 голосов
/ 19 февраля 2010

Используйте файл .htaccess из стандартной установки Wordpress, чтобы перенаправить все в один файл PHP. Как то так ...

<IfModule mod_rewrite.c>
    RewriteEngine On
    # Base is the URL path of the home directory
    RewriteBase /
    RewriteRule ^$ /index.php [L]

    # Skip real files and directories
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule .* /index.php [L]
</IfModule>

Затем используйте $_SERVER['REQUEST_URI'], чтобы выяснить, что искал пользователь. Измените .*, если вы хотите сделать правило более конкретным, например .*\.html.

4 голосов
/ 19 февраля 2010

Закария,

После использования правила перезаписи Renesis $_SERVER['REQUEST_URI'] будет равно 'home.html'.

Попробуйте что-то вроде:

<code><?php

// clean
$page = mysql_real_escape_string($_SERVER['REQUEST_URI']);

// make query
$query = sprintf("select Page.* from Page where name = '%s'", $page);

// find page ID
if($result = mysql_query($query)){

  $page = mysql_fetch_assoc($result);

  echo "<pre>", print_r($page, true), "
"; } ?>

Возможный вывод

Array (
  [id]    => 5
  [name]  => 'home.html'
)
1 голос
/ 19 февраля 2010

Используйте для этого переписывание Apache URL. На этом сайте только много много примеров. Вы также можете попробовать официальные документы по переписыванию Apache .

Вам необходимо убедиться, что ваша база данных обеспечивает уникальность имени, иначе у вас будут проблемы.

Редактировать

Пусть ваш index.php принимает параметр name = вместо параметра id. Вам нужно будет убедиться, что у вашей базы данных есть индексированное поле имени, чтобы не выполнять сканирование таблицы для каждого запроса страницы.

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