0

私はPHPコーディングに比較的慣れておらず、独自のMVCのものを作成するために取り組んでいます。フレームワークb/cを使用するよりも、これを実行したいのですが、この方法ではるかによく理解できます:)。

現在、サイトは次のように設定されています。

domain.com/services

index.phpに書き換えますか?page = services

index.phpの中に、URI文字列に基づいて正しいテンプレートをロードするコードがあります。しかし、私は自分のサイトをこれよりも少し複雑にしたいです...

サーバーに、URI文字列に基づいて適切なphpファイルをロードしてもらいたいです。これを行うための最良の方法は何ですか?おそらく、index.phpは実際に別のphpファイルを実行するように読み取っていますか?

ありがとう!

編集:私が今していることを処理する私の現在のhtaccessは次のとおりです:

# Turn on URL rewriting
RewriteEngine On

# Installation directory
#RewriteBase

# Protect hidden files from being viewed
<Files .*>
        Order Deny,Allow
        Deny From All
</Files>

RewriteCond %{HTTP_HOST} ^domain.net$
RewriteRule (.*) http://www.domain.net$1 [R=301]

#remove trailing slash
RewriteRule ^(.+)/$  /$1 [R=301,L]

# Protect application and system files from being viewed
RewriteRule ^(?:templates|configs|templates_c)\b.* index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule ^([^/\.]+)/?$ index.php?page=$1

欲しいものを達成するために何を変更する必要がありますか?私はちょうど考えていました:

RewriteRule ^(.*)$ index.php [L,NS]

その後:

list( $controller, $function, $params ) = explode( '/', $uri, 3 );
$params = explode( '/', $uri );

この時点で適切なコードを実行するための適切なphp方法論は何でしょうか?ファイルを含めるだけですか?

4

2 に答える 2

0

最適な方法は、URL の変更に.htaccess ModRewriteを使用することです。これにより、圧縮された読み取り可能な URL がスクリプト パスに正しく変換されます。

そのような状況で働く私自身の方法:

RewriteRule  ^/([^/]*)/([^/]*)/?$  engine.php?prmtrs=$1/$2 [L]

<?php
list($url_part, $url_page) = explode('/', $_GET['prmtrs']);
?>

もちろん、使用する前に $_GET からデータを消去する必要があります。アイデアをより明確にするために単純化した例です。

于 2012-05-06T20:22:57.050 に答える
0

URI に基づいて複数の書き換えルールを作成できます。簡単な例を次に示します。RewriteCond を使用して、より複雑なものを作成できます。

# Rewrite all URIs beginning with 'a' to index1.php
RewriteRule ^(a[^/\.]+)/?$ index1.php?page=$1

# Rewrite all URIs beginning with 'b' to index2.php
RewriteRule ^(b[^/\.]+)/?$ index2.php?page=$1

さまざまなファイルでさまざまなタイプの URI を処理することが本当に必要な場合は、そのような項目が多数ある場合を除いて、おそらくこれが適しています。それ以外の場合は、index.php 内からのディスパッチを把握できます。

于 2012-05-06T21:09:35.237 に答える