4

それで、Apacheの書き換えモジュールをいじり始めたところです。いくつかの異なる方法で実行されているのを見てきたので、これが正しいことを確認したいと思います。私のサンプルコードは今のところ単なる実験ですが、それは私が取り組んでいる新しいプロジェクトの基本構造になるかもしれません。

これが私の.htaccessファイルです:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_\-]+)/?$ index.php?id=$1 [L,NC]
</IfModule>

私のインデックスファイル:

<?php
include 'views/headerView.php';
switch(strtolower($_GET['id']))
{
    case "first": include 'views/firstPageView.php';
    break;
    case "second": include 'views/secondPageView.php';
    break;
    default: include 'views/homeView.php';
}
include 'views/footerView.php';
?>

そして、デフォルトのhomeViewテンプレート:

<p>This is the home page.</p>
<p>To the first page. <a href="first">First Page</a></p>
<p>To the second page. <a href="second">Second Page</a></p>

私の主な関心事は、テンプレートのアンカータグに「first」と「second」のURLだけがあることです。URLは、インデックスファイルのスイッチで使用され、表示するビューを決定します。私はこのようにしているので、ユーザーがリンクをクリックすると、「first」または「second」という単語がリライトモジュールのバックリファレンスで使用され、URLにdomainではなくdomain.com/firstとして表示されます。 com /?id=first。それで、私はここで正しい軌道に乗っているのですか、それとも何かが足りないのですか?何か役立つアドバイスをいただければ幸いです。ありがとうございます。

4

1 に答える 1

2

それで、私はここで正しい軌道に乗っているのですか、それとも何かが足りないのですか?何か役立つアドバイスをいただければ幸いです。ありがとうございます。

あなたは正しい方向に進んでいます。ここで何をしているのかは問題ありません。もちろん、物事を微調整する必要がありますが、一般的には正しい方向に進んでいます。リンクを生成するもの、ある種のマッピングなどが必要になる場合があります。つまり、「最初の」と「views/firstPageView.php」にマップされたものです。次に、それをindex.phpで使用して、ルーティングを処理したり、リンクを生成したりできます。したがって、「first」のようなものが「something_else」に変更された場合、すべてのテンプレートに移動して手動で変更する必要はありません。

さらに、mod_rewriteルールで末尾のスラッシュの可能性を処理します。末尾のスラッシュが原因でポップアップする可能性のあるランダム性がたくさんあります。mod_dirがリクエストがディレクトリに対するものであると判断した場合、Apacheは末尾のスラッシュがないURLを末尾のスラッシュを含むURLに301リダイレクトします。これを回避するために、すべてのリンクの末尾にスラッシュを付けることができます。また、末尾にスラッシュがある場合<a href="first">First Page</a>、URIベースが/first/の代わりになっているため、のような相対リンクが機能しなくなる可能性があり/ます。

于 2012-08-23T20:51:09.847 に答える