0

最後に拡張子を表示せずに一連のファイルを作成したい。これを行う最も簡単な方法は、次のようにすることでした。

/usa/index.php
/usa/alaska/index.php
/usa/alabama/index.php
/usa/california/index.php

やりたいことはこれ

/usa/alaska.php
/usa/alabama.php
/usa/california.php

次のように表示します。

/usa/alaska
/usa/alabama
/usa/california

ただし、これに追加したいレベルがもう 1 つあります。都市です。

/usa/alaska/adak.php
/usa/alaska/anchorage.php
/usa/california/los-angles.php

「.php」を表示したくありませんが、各状態はファイルとディレクトリの両方として存在します。私が欲しいのは、デフォルトのディレクトリではなく、ファイルのファイル バージョンを提供する htaccess ルールです。また、ファイルの末尾から .php を取り除きたいので、最終結果は次のようになります

/usa 
/usa/alaska (alaska.php)
/usa/alaska/adak  (adak.php)

すべてのディレクトリを作成し、各ディレクトリに index.php を使用することでこれに近づくことができることはわかっていますが、それぞれに 1 つのファイルを含む何千ものディレクトリがあり、更新は面倒です。1 つのファイルが含まれる 1000 個のディレクトリよりも、1000 個のファイルが含まれる 1 つのディレクトリが必要です。

誰かが私を正しい方向に向けて、50州すべてでこれを行っていることを知ってください.

ジム

4

2 に答える 2

1

また、単一の php (例: index.php) ファイルを使用し、それで始まるすべての URL をリダイレクトすることをお勧めしusaます。それらを異なるディレクトリやファイルに分けるのではありません。次のようないくつかの書き換えルールが必要です

RewriteEngine On
RewriteRule ^usa/([^/.]+)$ index.php?state=$1 [L]
RewriteRule ^usa/([^/]+)/([^/.]+)$ index.php?state=$1&city=$2 [L]

したがって、パラメーターindex.phpを確認するだけで済み$_GETます。

更新:
データベースを使用してそこから必要なデータを取得することに慣れていない場合は、パラメーターを使用して、必要なファイルを動的に含める/要求することができます。このようなもの

<?php
    $source = ''; //or the 'ROOT' directory
    if(isset($_GET['state'])) $source .= $_GET['state'].'/';
    if(isset($_GET['city'])) $source .= $_GET['city'].'.php';
    include($source);  // here $source would be something like 'alaska/adak.php'
                       // and is assumed that the dir 'alaska' is on the same 
                       // level as 'index.php'
?>

ただし、元の質問に答えるには、次を使用できます.htaccess

RewriteEngine On
RewriteRule ^usa/([^/.]+)$ usa/$1.php [L]
RewriteRule ^usa/([^/]+)/([^/.]+)$ usa/$1/$2.php [L]
于 2012-06-25T08:29:11.200 に答える
0

1 つのファイルだけを作成する場合はどうでしょうか。

/usa/index.php

$_SERVER["REQUEST_URI"]

現在の URI を読み取ることができます。たとえば、ユーザーが「http://domain.foo/usa/alaska」と入力すると、もちろん 404 エラーが返されます。しかし、代わりに your を呼び出すindex.phpには、次の行を に書き込むことができます.htaccess:

ErrorDocument 404 /usa/index.php

これで、index.phpは URI に書き込まれたものをすべて受け取り、結果を照合してファイルをインクルードしたり、エラーを処理したりできます。

しかし、.htaccess のみを使用したより良い解決策があるかもしれませんが、わかりません。:)

于 2012-06-23T23:25:53.037 に答える