0

私はゼロからウェブサイトを構築しています。すべてがMySQLにあり、すべてのコード、メタデータ、jsコード、CSS、本文コンテンツ、すべて. そのために、domain.com/index.php によって提供される変数に基づいて、HTML ページをレンダリングするクラスを作成しました。

少し前に見つけたブログに基づいて、私はこのようにすることに気が進まなかった。完全なチュートリアルが付属していました。残念ながら、もう見つかりません。

とにかく、私の「マスター」テーブルURL'sは次のように構成されています。

| subdomain      | category   | subcategory | page        | extension |
-----------------------------------------------------------------------
|                | properties | houses      | downtown-la | html      |
| properties     | houses     | downtown    |             | /         |
| ch             | properties | houses      | downtown-la | html      |
| jp             | properties | houses      | downtown-la | html      |
| jp.properties  | houses     | downtown    |             | /         |
| ch.properties  | houses     | downtown    |             | /         |

もちろん、このテーブルには pageID などのフィールドが他にもあり、言語、ページのタイトル、説明、キーワードなどに基づいてコンテンツを定義する他のテーブルもあります。

私の目標は次のとおりです。

  1. index.php にすべての uri/url リクエストをセグメントに処理させます。
  2. ユーザーがサブドメイン/サブサブドメインを入力したかどうかを認識します。
  3. これらの値を MySQL に渡して、ページが存在するかどうかを確認します。
  4. 結果を $status に割り当てます (「ページが見つかりました」の場合は 1 | 「ページが見つかりません」の場合は 0)。
  5. URL/ページが存在する場合は、ページの ID を $id に渡し、クラスがページを (MySQL 経由で) レンダリングできるようにします。
$subdomain = 'properties';
$sub-subdomain = null;
$domain = 'domain,com';
$category = 'houses';
$subcategory = 'downtown';
$ext = '/';


// url in browser: properties.domain.com/houses/downtown/
// some php code here to process url (because there's no folders. Only
root/index.php)    

include('class-page.php');
   switch ($status) {
     Case 1:
        $html =new page::create($id);
        echo $html;
        break;
     case 0:
        $html =new page::create(404);
        //php code to rewrite url as: www.domain.com/error/404.html
     echo $html;
}

ご覧のとおり、index.php のすべてのページを処理し、ユーザーに www.domain.com/category/subcategory/page.html のページにアクセスしていると思わせたいと考えています。

問題は、リダイレクトせずにURLをそのままにしておく方法ではなく、phpでurl/uriを処理する方法がわからないことです。私はphpと非常に小さな.htaccess(またはできればなし)でこの偉業を成し遂げたいと思っています。

4

2 に答える 2

1

DocForgeからの 1 つのメソッド:

.htaccess

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

index.php

if ($_GET['q']) {
  // Break the request into it's path parts
  $path_parts = explode('/', $_GET['q']);
  $section = $path_parts[0];
}
else {
  $section = 'home';
}

switch ($section) {
  case 'home':
    // Handle requests for the home page
    ...
    break;
  case 'about':
    // Requests to /about
    ...
    break;

 ...

PHP でサブドメインを取得する 1 つの方法:

$subdomain = '';
$domain_parts = explode('.', $_SERVER['HTTP_HOST']);
if (count($domain_parts) > 2) {
    $subdomain = $domain_parts[0];
}
于 2013-10-12T21:37:10.200 に答える
0

ルールの書き換えが面倒なので、apache force type と shtml を使っています。

次に、「anything-you-want」という名前のファイルを使用します

<Files anything-you-want>
ForceType application/x-httpd-php
</Files> 

404.shtml エラー ファイルと index.shtml ページを使用してファイルを含めます。

<!--#include virtual="/anything-you-want"-->

「anything-you-want」ファイル内で、URL を解析し、その内容に基づいて情報を表示します。私はこれを検索エンジン API に使用しているので、1 つのページが機能し、ページ数が無制限の検索エンジンのように見えます。そして、私が書いた自分のページを持つことができます。

index.php - インデックス ページまたはデフォルトの検索ページを返します

私たちについて、お問い合わせなど、何でも - サイトのそれぞれのページを返します。

/tiger/index.php - ページが 3 つしかない場合でも、API を使用してトラに関する検索を返します。

/airplanes/ - ページが 3 つしかない場合でも、API を使用して飛行機に関する検索を返します。

それほど難しいことではありません。URL に基づいて実行したいことのロジックをステップ実行する必要があるだけです。

そして、膨大な数の不可解な apache 書き換えルールは必要ありません。

于 2013-12-11T03:30:49.777 に答える