Как я могу использовать в .htaccess? - PullRequest
0 голосов
/ 09 августа 2010

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

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. Как я могу это сделать?

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

EDIT:

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.

Ответы [ 3 ]

4 голосов
/ 09 августа 2010

.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?
:)

0 голосов
/ 12 января 2017

Вероятно, лучший способ - перенаправить страницу, чтобы исправить 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 /YOUR_SCRIPT_PATH_WITHOUT_HOST_NAME/

также см. Apache Doc

0 голосов
/ 09 августа 2010

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

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

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