0

我无法完全理解我想要使用 mod_rewrite 做什么。

我希望能够输入一个网址,例如:

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'(第二个例子)

重申一下:所有请求都将由 管理handle.php,但如果在 URL 上附加了任何其他变量,首先将检查关键字people, (以及我手动添加的任何其他变量) tasksprojects并以建议的形式添加紧随其后的值多于。

IE。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 回答