Как я могу использовать в .htaccess?

Я хочу изменить этот адрес:

www.domain.com/game.php?id=1 

к чему-то вроде этого:

 www.domain.com/game/1/THE-NAME-OF-THE-GAME-IN-DB 

Как мне это сделать?

И еще один вопрос:

Я хочу, когда пользователь переходит к адресу, который не существует, например, если он не существует:

 www.domain.com/game.php?id=9123912 - this ID doesnt exists 

Сервер передаст ему ошибку 404. Как мне это сделать?

Большое спасибо.

РЕДАКТИРОВАТЬ:

game.php:

 if (isset($_GET['id'])) { $row = mysql_num_rows(mysql_query("SELECT * FROM games WHERE id = '{$_GET['id']}'")); if ($row) { $game = mysql_fetch_array(mysql_query("SELECT * FROM games WHERE id = '{$_GET['id']}'")); Header( "HTTP/1.1 301 Moved Permanently" ); Header( "Location: /game/".$game['id']."/".seo_title($game['name'])); } else { Header( "HTTP/1.1 404 Not found" ); } exit; } 

Htaccess:

 LIKE YOU SAID. I JUST COPIED. 

.htaccess

 RewriteEngine On RewriteRule ^game/([0-9]+)/ /game.php?newid=$1 

game.php

 if (isset($_GET['id'])) { $row = dbgetrow("SELECT * FROM games WHERE id = %s",$_GET['id']); if ($row) { Header( "HTTP/1.1 301 Moved Permanently" ); Header( "Location: /game/".$row['id']."/".seo_title($row['name'])); } else { Header( "HTTP/1.1 404 Not found" ); } exit; } if (isset($_GET['newid'])) $_GET['id'] = $_GET['newid']; 

это код, который работает для меня, но считается псевдокодом, который дает вам представление.
Функция dbgetrow () для получения строки из базы данных
и функция seo_title () может быть такой, как эта

 function seo_title($s) { $s = strtolower(trim($s)); $s = str_replace(" ","-",$s); $s = preg_replace('![^a-z0-9-]!',"",$s); $s = preg_replace('!\-+!',"-",$s); return $s; } 

Вся концепция была зажата от SO 🙂
единственная games/1/ часть действительно важна, а остальное может быть чем угодно, название игры – только для целей seo. Возьмите это название вопроса, например:
Как я могу использовать в .htaccess?
🙂

.htaccess не предназначен для выполнения перезаписи URL-адресов, как вы упоминаете. Если на вашем сервере работает apache, попробуйте это . Если на вашем сервере работает IIS, попробуйте это .

Что касается второго вопроса, если id не существует, попробуйте выполнить game.php перенаправление к имени файла, которое, как вы знаете, не существует (например, 9123912.html). Сервер должен быть настроен для доставки 404 изначально.

Вероятно, лучший способ – перенаправить страницу, чтобы исправить URL-адрес, например, код: (работайте для меня)

 if (isset($_GET['id'])) { $script_url = "http://localhost/scripts/myscripts/"; $row = dbgetrow("SELECT * FROM games WHERE id = %s",$_GET['id']); if ($row) { Header( "HTTP/1.1 301 Moved Permanently" ); Header( "Location: ".$script_url."/game/".$row['id']."/".seo_title($row['name'])); } else { Header( "HTTP/1.1 404 Not found" ); } } 

и в файле .htaccess вы также можете установить RewriteBase на такие RewriteBase / как RewriteBase / или RewriteBase /YOUR_SCRIPT_PATH_WITHOUT_HOST_NAME/

также см. Apache Doc