2

ここでいくつか読んで検索しましたが、私の質問に対する答えが見つからないか、URL を書き換えるにはあまりにも新しいので、それを理解できません。これが私が達成しようとしていることです:

チャンネルの説明と ID を保持するテーブルがあります。ID は、表示するコンテンツを知るために使用されるため、URL に次のようなものがあります。

http://www.mysite.com/page?channel=1

今私がやりたいことは、これを表示することです:

http://www.mysite.com/page/description

そして、どうにかしてその説明の ID を取得して、適切なコンテンツを表示することができます。うまくいけば、これは理にかなっています。私が考えた唯一のことは、私のページの上部にあります。

select * from channels where description = $_GET['description']

IDを返してから使用します。それが唯一の方法でしょうか?または.htaccessで十分ですか?そのような初心者:(

編集:これは今私のhtaccessにあります:

AddType x-mapp-php5 .php
Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]
##This is to redirect just stream page only
RewriteRule ^stream/(.+)/([0-9]+)$ /stream.php?channel=$1
4

2 に答える 2

1

ID を取得したい場合は、次のようにシェルを実行します。

  1. Apache モジュールの mod_rewrite を有効にします
  2. DocumentRoot ディレクトリに .htaccess を作成します。
  3. 次に貼り付け:

    RewriteEngine On
    RewriteRule ^([0-9]+)$ /page.php?channel=$1
    
  4. URL をたどると、次のようになります。

http://www.mysite.com/1

次のようなコンテンツを URL から取得します。

http://www.mysite.com/page?channel=1

于 2013-02-12T07:54:16.733 に答える
0

これにはいくつかの方法があります。

アプリケーションでMVCアーキテクチャを使用すると、何らかの形でルーティング ロジックを使用する必要があります。

具体的に必要なことは、Apache RewriteMapなど、さまざまな方法で実行できます。

私は、URI を受け取り、それらをコントローラー/ページにルーティングするように、アプリケーションを個人的に設計します。これにより、リクエストに対して最終的に表示されるものを PHP が引き続き完全に制御できるようになります。

/page/descriptionアプリケーションの大部分に影響を与えずにリンクを美しくするというタスクを与えられたと仮定すると、 にマップする方法を見つける必要があります/page?channel=1

このユニークな状況では、本質的にタスクが既存のコードベースを変更する必要がないため、デコレータ パターンに似たものを使用します。

.htaccess

RewriteEngine On
RewriteRule ^.*$ router.php [NC,L]

ルーター.php

include'config.php';// remove your config loading from index.php

$request = $_SERVER['REQUEST_URI'];
$request = explode('/', $_request);
    # in $request you will have all the uri segments now

/* complex logic to find out what page you're on */

   # assuming we found out it's page/description
$_GET['channel'] = 1;// or getIdFromDescription($request[2])
   # this forces the environment to believe it got a request with ?channel=1

# revert to your old request with injected environment
include'index.php';

ここでの前提は、index.php が古いページをロードできることです。そして、それらへのアクセス方法を変更するだけです。そのため、ルーターを使用して新しいリクエストを古いリクエストにマップします。

完璧ではありませんが、設計が不十分なアプリケーションではうまく機能します。

注意:現在の実装では、静的リソース (画像、css、js など) を処理しません。

于 2013-02-12T07:53:54.657 に答える