1. ホーム
  2. php

[解決済み] PHPによるURLリライト

2022-05-08 05:06:52

質問

以下のようなURLがあります。

url.com/picture.php?id=51

そのURLをどのように変換すればいいのでしょうか。

picture.php/Some-text-goes-here/51

WordPressも同じだと思います。

PHPでフレンドリーなURLを作るにはどうしたらいいですか?

どのように解決するのですか?

基本的に2つの方法があります。

mod_rewrite を使った .htaccess ルート

というファイルを追加します。 .htaccess をルートフォルダにコピーし、以下のような内容を追加してください。

RewriteEngine on
RewriteRule ^/?Some-text-goes-here/([0-9]+)$ /picture.php?id=$1

これは Apache にこのフォルダに対して mod_rewrite を有効にするよう指示し、 正規表現にマッチする URL を尋ねられたらそれをリライトします。 内部的に を、エンドユーザーには見えないように、あなたが望むものに変換します。簡単ですが、柔軟性に欠けるので、もっと強力なものが必要な場合は、以下のようにします。

PHPルート

代わりに以下を.htaccessに記述してください。(先頭のスラッシュに注意してください)

FallbackResource /index.php

を実行するように指示します。 index.php は、通常サイト内で見つけることができないすべてのファイルに対して使用されます。そこで、たとえば次のようなことができます。

$path = ltrim($_SERVER['REQUEST_URI'], '/');    // Trim leading slash(es)
$elements = explode('/', $path);                // Split path on slashes
if(empty($elements[0])) {                       // No path elements means home
    ShowHomepage();
} else switch(array_shift($elements))             // Pop off first item and switch
{
    case 'Some-text-goes-here':
        ShowPicture($elements); // passes rest of parameters to internal function
        break;
    case 'more':
        ...
    default:
        header('HTTP/1.1 404 Not Found');
        Show404Error();
}

これは、URLの解析、設定やデータベースに依存するURLなどにおいて、はるかに柔軟性があるため、大きなサイトやCMSシステムではこの方法がとられています。散発的な使用であれば、ハードコードされたリライトルールを .htaccess で十分なのですが。