web-dev-qa-db-ja.com

PHPのURLでIDと名前を変更する方法

URLをどのように変更しますか

from:example.com/games.php?id=27

宛先:website.com/games/271/game-name-here

これまでのところ.htaccessにこれがあります:

RewriteEngine on
RewriteRule ^games/([0-9]+)/?$ games.php?id=$1 [NC,L]
RewriteRule ^(.*).aspx$ $1.php
RewriteRule ^(.*).ashx$ $1.php
Options -Indexes
<Files 403.shtml>
order allow,deny
allow from all
</Files>

RewriteCond %{HTTP_Host} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_Host}%{REQUEST_URI} [L,R=301]

Options -Multiviews
1
slixxed

私が理解しているように、次のURL website.com/games/271/game-name-hereに対するリクエストは、games.phpによって処理される必要があります。

これには、より単純なルールを使用できます。

RewriteRule ^games/(.*)$ /games.php?var=$1 [L]

これにより、/ games /を含むすべてのリクエストがgames.phpに送信されます。たとえば.

/games/271/game-name-hereは次のようになります/games.php?var=271/game-name-here

現在、game-name-hereはSEO専用です。実際に必要なのはIDだけです。だから、このようにvarからid部分をフィルタリングします-

$value=($_GET['var']);
$temp = explode('/',$value);
$id = $temp[0];

HtaccessはURLリクエストの処理にのみ使用されることを忘れないでください。 Webページに正しいURLを作成する必要があります。

追加のヒント:次のURL構造website.com/games/271-game-name-hereを考慮することもできます。ここでは、「/」ではなくハイフン「-」でURLを展開します

1
Aakash

基本的に、次の2つのことを行う必要があります。

  1. .htaccessはURLをデコードしてabc.phpに送信します
  2. URLを作成するファイルを変更する必要があります。 abc.php?vid=55を参照するページがindex.phpである場合、index.phpのコードを変更する必要があります

例えば:

古いプログラム

$query = "SELECT id,title FROM vid_table";
$result = mysql_query($query);

while ($data = mysql_fetch_array($result))
{
    echo '<a href="abc.php?vid=' . $data['id'] . '">' . $data['title'] . '</a>';
}

新しいプログラム

while ($data = mysql_fetch_array($result))
{
    echo '<a href="abc.php/vid/' . str_replace(" ", "-", $data['title']) . ">' . $data['title'] . '</a>';
}

abc.phpでは、プログラムがデータベースから読み取る方法を変更する必要があります

/* this means that the page get redirected from .htaccess */
if (isset($_SERVER['REDIRECT_URL'])) 
{
    $parts = explode('/', $_SERVER['REDIRECT_URL']);

    array_shift($parts);

    $url_name = $parts[1];
    $url_name = str_replace("-", " ", $url_name);
    $query = "SELECT id FROM vid_table WHERE title = '$url_name'";
    $result = mysql_query($query);
    $data = mysql_fetch_array($result);
    $_GET['id'] = $data['id'];
}

その後、プログラムを続行し、2番目のステップに進み、URLを書き換えることができます。

詳しくは:
http://www.smashingmagazine.com/2011/11/introduction-to-url-rewriting/

私はそれがあまりにも混乱しないことを願っています。

0
user55526