0

最初.htaccessに、私はに送りurlますpublic/index.php:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ public/index.php [NC,L]

そして私のpublic/index.php

<?php
// define root path of the site
if(!defined('ROOT_PATH')){
define('ROOT_PATH','../');
}

require_once ROOT_PATH.'function/my_autoloader.php';

use application\controllers as controllers;

 $uri=strtolower($_SERVER['REQUEST_URI']);
 $actionName='';
 $uriData=array();
 $uriData=preg_split('/[\/\\\]/',$uri );

 $actionName = (!empty($uriData[3])) ? preg_split('/[?].*/', $uriData[3] ): '' ;
 $actionName =$actionName[0];
 $controllerName = (!empty($uriData[2])) ? $uriData[2] : '' ;

 switch ($controllerName) {
case 'manage':
    $controller = new Controllers\manageController($controllerName,$actionName);
    break;
default:
    die('ERROR WE DON\'T HAVE THIS ACTION!');
    exit;
    break;
  }

// function dispatch send url to controller layer 
$controller->dispatch();
?>

私はこのディレクトリを持っています:

  • 応用
    • コントローラ
    • モデル
    • 見る
  • 公衆
    • css
    • java script
    • index.php
  • .htaccess

URLたとえば、localhost/lib/manage/id/1代わりにきれいにしたいのですがlocalhost/lib/manage?id=1、どうすればよいですか?

4

2 に答える 2

1

現在の書き換えルールを使用すると、すべてが既にindex.phpファイルにリダイレクトされています。そして、すでに行っているように、URL を解析してこれらすべての URL パラメーターを見つける必要があります。これはルーティングと呼ばれ、ほとんどの PHP フレームワークはこの方法で行います。localhost/lib/manage/id/1簡単な解析を行うと、配列に変換できます。

array(
    'controller' => 'manage',
    'id' => 1
)

最初に「/」で URL を分割し、それをループして値を見つけることで、これを簡単に行うことができます。

$output = array();
$url = split('/', $_SERVER['REQUEST_URI']);
// the first part is the controller
$output['controller'] = array_shift($url);

while (count($url) >= 2) {
    // take the next two elements from the array, and put them in the output
    $key = array_shift($url);
    $value = array_shift($url);
    $output[$key] = $value;
}

これで、$output配列にはキー => 値のペアが含まれるようになりました。ただし、コードはおそらくあまり安全ではないことに注意してください。これは概念を示すためのものであり、実際に運用可能なコードではありません。

于 2013-01-13T22:54:10.467 に答える
0

これは、URL の一部をキャプチャしてクエリ文字列として配置することで実行できます。

RewriteRule /lib/manage/id/([0-9]+) /lib/manage?id=$1 [L]

括弧内の文字列は $1 変数に入れられます。複数ある場合は()、$2、$3 などに入れられます。

于 2013-01-13T18:11:58.437 に答える