0

私のウェブサイトの残りの部分にリンクする必要がある単一の index.php ページがあります。

<?php 

    if(!isset($_GET['page']))$page = 'home.php';
        else{
            $page = $_GET['page'] . ".php";
        }

    include("_includes/header.php");

    include("_includes/navigation.php");

    include("_pages/$page");

    include("_includes/footer.php");
?>

これは私のindex.phpがどのように見えるかです。クリックしたページ (ナビゲーションをクリックしたとき) を取得し、このページにリダイレクトして、ヘッダー、ナビゲーション、フッターがすべてのページで再利用されるようにする必要があります。

<div id="navi">
    <ul>
        <li><a href="home">Home</a></li>
        <li><a href="skills.php">Skills</a></li>
        <li><a href="_pages/my_projects.php">Projects</a></li>
        <li><a href="_pages/experience">Experience</i></a></li>
        <li><a href="_pages/personal">About</a></li>
        <li><a href="_pages/contact">Contact</a></li>
    </ul>
</div>

コードによると、「ホーム」リンクは機能するはずですが、私がいるディレクトリで「ホーム」を探しているため、URLが見つかりませんと表示されます。しかし、それは私のページディレクトリにあります。「スキル」も同じです。パスを指定しているため、機能するのは連絡先を介したリンクプロジェクトだけです。ただし、header.php (css を含む)、navigation.php、および footer.php がここに含まれていないため、機能するリンクは私のインデックス ページを通過しません。

私は調査を行い、.htaccessファイルおよび/またはmod_rewriteで何かをしなければならないことがわかりました。誰かが私を助けてくれませんか。私は今約2〜3週間探していましたが、何もありません。

4

3 に答える 3

1

リンクは次のようになります。

<div id="navi">
    <ul>
        <li><a href="index.php?page=home">Home</a></li>
        <li><a href="index.php?page=skills">Skills</a></li>
        <li><a href="index.php?page=my_projects">Projects</a></li>
        <li><a href="index.php?page=experience">Experience</i></a></li>
        <li><a href="index.php?page=personal">About</a></li>
        <li><a href="index.php?page=contact">Contact</a></li>
    </ul>
</div>
于 2013-05-08T16:46:36.430 に答える
1

home ではなく、index.php を参照する必要があります。

<div id="navi">
    <ul>
        <li><a href="index.php?page=home">Home</a></li>
        <li><a href="skills.php">Skills</a></li>
        <li><a href="_pages/my_projects.php">Projects</a></li>
        <li><a href="_pages/experience">Experience</i></a></li>
        <li><a href="_pages/personal">About</a></li>
        <li><a href="_pages/contact">Contact</a></li>
    </ul>
</div>
于 2013-05-08T16:43:34.703 に答える
0

Web サーバーがリクエストを処理する方法に強く関連しています。PHP で処理されていない URL にアクセスしようとすると、機能しません。デフォルトでは、PHP は .php リクエスト URL (.php5 なども含む) のみを処理します。

解決策は、/home/ を index.php?page=home に変換する書き換え条件を記述することです。これは、mod_rewrite を有効にし、htaccess を有効にして Apache Web サーバーを実行していることを前提としています。

したがって、この方法でリンクを正規化するとします。

  <div id="navi">
      <ul>
            <li><a href="/pages/home">Home</a></li>
            <li><a href="/pages/skills">Skills</a></li>
            <li><a href="/pages/my_projects">Projects</a></li>
            <li><a href="/pages/page=experience">Experience</i></a></li>
            <li><a href="/pages/page=personal">About</a></li>
            <li><a href="/pages/page=contact">Contact</a></li>
      </ul>
  </div>

次のように .htaccess を記述して、/pages/ フォルダーに配置できます。

   RewriteEngine On
   RewriteRule ^/pages/(.*)$ /index.php?page=$1 [QSA,L]

/pages/ へのすべてのリクエストは書き換えられることに注意してください。そのため、.css .png などの書き換えを避けて慎重に記述してください...

これは、リクエストに次のように影響します。

  1. Apache は、home という名前の /pages/ にあるファイルに対する要求を受け取ります。
  2. RewriteRule は正規表現でそれを検出します
  3. このルールは、パラメーター page=home (または正規表現がキャッチしたもの) を使用して index.php で応答するように apache を強制します。

PS おそらく、プロキシとして index.php にリクエストを送信するフラグ P に興味があるかもしれませんが、詳細については mod_rewrite ドキュメント ( http://httpd.apache.org/docs/current/mod/mod_rewrite.html )

于 2013-05-08T17:18:52.190 に答える