0

mod_rewrite を使用してやりたいことを正確に把握できません。

次のようなURLを入力できるようにしたい:

http://site.com/project/project-title/people/alex-coady

また

http://site.com/project/project-title/tasks/task-list-title

handle.phpこれは、次のような使用可能な変数で処理されます。

$_GET['project'] would equal 'project-title'

$_GET['people'] would equal 'alex-coady'(最初の例)

$_GET['tasks'] would equal 'task-list-title'(2番目の例)

繰り返しますが、すべてのリクエストは によって管理されますがhandle.php、追加の変数が URL に追加されている場合は、最初にキーワードpeople, tasks, projects(および手動で追加した他のもの) がチェックされ、それらの直後の値が提案された形式で追加されます。その上。

すなわち。http://site.com/handle.php?project=project-title&people=alex-coady&tasks=(最初の例)

ありがとうございました。

4

2 に答える 2

1
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^project/([^/]+)/([^/]+)/([^/]+)$ handle.php?project=$1&people=$2&tasks=$3 [L]

または

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^project/(.*) handle.php?data=$1 [L]

そして、handle.php

 list($project, $task, $people, $foo, $bar) = explode('/', $_GET['data]);
于 2012-04-07T14:30:36.277 に答える
1

これを処理する方法は、プロジェクト、人、タスクを忘れてすべてを handle.php に渡し、そこで処理することです。そうしないと、将来追加する各リクエストに対して書き換えルールが設定される可能性があります。

したがって、 mod_rewrite は次のようになります。

RewriteEngine On
Options -Indexes

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ handle.php?route=$1 [L,QSA]

ハンドル/ルーターは次のようになります (例)

<?php 
//Get Route from request
$route = (!isset($_GET['route']))?'':$_GET['route'];

/*Split the parts of the route*/
$parts = explode('/', $route,4);

//http://site.com/project/project-title/people/alex-coady
//http://site.com/project/project-title/tasks/task-list-title

$project    = (isset($parts[0]))?$parts[0]:null; //project/
$p_title    = (isset($parts[1]))?$parts[1]:null; //project-title/
$action     = (isset($parts[2]))?$parts[2]:null; //people or tasks
$sub_action = (isset($parts[3]))?$parts[3]:null; //alex-coady or task-list-title

//Then work with the above variables
?>
于 2012-04-07T14:42:13.283 に答える