0

私は現在、単純な MVC フレームワークを構築していますが、ローカルホストで URL を分割するだけでなく、実際の運用サーバーでも機能させるという点で、少し障害が発生しています。

基本的に、私のローカルホストの URL は次のとおりです。

localhost/project/public/controller/action

ライブバージョンは次のようになります。

www.example.com/controller/action

私の最初の考えは、ライブサーバーでは完全に機能する $_SERVER['REQUEST_URI'] を使用することでしたが、ローカルホストでは次のように返されます。

/project/public/controller/action

私が必要とするのは:

controller/action

私は周りを検索しましたが、見つけた唯一の答えは、私が本当にやりたくない仮想ホストをセットアップすることでした-このコードは、セットアップ方法を知らない人も知らない人も共有するので、できれば避けたい。

編集:記録のために-これは私が見つけた答えです-ローカルホストとライブサーバーの両方で同じ $_SERVER['REQUEST_URI'] を取得する方法

このフォルダー構造は常に同じではないため、 /project/public/ も削除できません。

したがって、基本的に public/ の部分までのパスを取得する必要がありますが、 public フォルダーが別の名前になっている可能性があるため、それを使用することさえできません。

Laravelなどのフレームワークがそれを行うので、これが可能でなければならないことは知っていますが、そのソースを見ても、よくわかりません。

助けてくれてありがとう。

編集:可能な答え

何かを投稿するとすぐに脳波が発生する頻度は奇妙です...

エントリーポイントでbasename( DIR ) を実行するだけで、それが何であるかに関係なくフォルダーの名前が得られると考えていました。次に、それを使用して、そのフォルダーの最初のインスタンスの前 (含む) のすべてを削除できます。

これを試してみますが、もっと洗練された解決策があれば、まだ聞きたいです。

4

1 に答える 1

1

このフォルダー構造は常に同じではないため、 /project/public/ も削除できません。

しかし、私は、あなたは常に部品を持っているcontrollerと思いますactionか?はいの場合は、次のようにします。

$uriParts = explode('/', $_SERVER['REQUEST_URI']);
$count = count($uriParts);
$controller = isset($uriParts[$count - 2]) ? $uriParts[$count - 2] : null;
$action = isset($uriParts[$count - 1]) ? $uriParts[$count - 1] : null;

REQUEST_URIサーバーパスの一部ではない終了文字列を取得するには、これを試してください:

substr($_SERVER['REQUEST_URI'], strlen(dirname($_SERVER['SCRIPT_NAME'])));
于 2013-08-23T12:38:43.490 に答える