Mod重写麻烦

时间:2009-10-10 16:10:09

标签: .htaccess mod-rewrite

我想在services.php上找到一个主要部分,然后在services_logodesign.php上找到一些子部分。

我想让网址看起来像: 当我单击按钮打开services_logodesign.php时,浏览器应显示“services / logo design”

我还有其他几个子部分,任何其他页面都有一个代码会很好。

1 个答案:

答案 0 :(得分:0)

执行所需操作的最简单方法是将所有请求重定向到本质上是调度程序脚本 - index.php将是此类调度程序脚本的良好候选者。

您网站根目录中的.htaccess文件如下所示:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

此mod_rewrite配置将所有请求发送到index.php。这意味着请求/ services / logo design /(顺便说一句,url路径中的空格不是一个好主意)或/ foo / bar或/ blah / blah / blah都将转到/index.php

您的index.php脚本可以将url元素拆分为数组,以便进行处理。

$req = array_map( "urldecode", array_filter( explode( '/', $_SERVER['REQUEST_URI'] ) ) );

如果您发送了请求/ bloop / bleep / blorp,则上面的php代码行会将以下内容放入$ req数组中:

阵列( 'BLOOP', '哔哔', 'blorp');

或者像/ services / logo_design /这样的请求看起来像:array('services',logo_design)

处理此数组的一种简单方法是:

if ($req[0] == 'services') {
  if ($req[1] == 'logo_design') { include_once(services_logodesign.php); }
  else { include_once(services.php); }
}

看看它是如何工作的?虽然这是你应该做的一个简化的例子,但它比你试图完成同样任务的方式更好,更好,更安全。