Apache Mod-重写问题

问题描述:

我在名为blog的文件夹内有一个名为index.php的PHP脚本。有三种不同的观点。Apache Mod-重写问题

  1. http://www.myDomain.com/blog/index.php
  2. 类别

我想改变基于URL的看法http://www.myDomain.com/blog/index.php?post=namehttp://www.myDomain.com/blog/index.php?tags=list

  1. /博客重定向到数1以上
  2. /博客/名称的类别重定向到numbe 2以上
  3. /博客/名称的类别/名称的-交重定向到3号以上。

现在我有以下mod_rewrite规则。

RewriteRule ^blog$ blog/index.php [L] 
RewriteRule ^blog/(.+)/(.+)$ blog/index.php?post=$2 [L] 
RewriteRule ^blog/(.+)$ blog/index.php?tags=$1 [L] 

这不起作用,我不知道为什么。现在,它总是重定向到一个网址:

blog/index.php?tags=$1

而GET数据包含“的index.php”。

而且,如果一个斜杠添加到最终规则像这样:

RewriteRule ^blog/(.+)/$ blog/index.php?tags=$1 [L] 

所有重定向做工精细。问题是,我需要在URL末尾有正斜杠,如果我想要类别视图。

任何想法发生了什么?我如何解决这个问题?


感谢您的回复。我发现我的问题是在名为“blog”的文件夹中存在我的脚本的副作用。以下是index.php的样子:

<?php 

define ('BASE_PATH', "../blog/"); 

include_once(BASE_PATH . 'controller/Controller.php'); 

$controller = new Controller(); 
$controller->invoke(); 

看到问题了吗?由于我的脚本的基本路径是“博客”,mod_rewrite正在重写程序中的所有引用。通过将我的脚本文件夹重命名为blogScript,它解决了问题。

在正则表达式,.任何字符(包括/字符)匹配,从而尝试做^blog/([^/]+)$,而不是匹配除外/任何字符。

+0

这是为了答复,我会记住的。 char – user182666 2009-12-29 01:00:39

你可以这样写:

RewriteRule ^blog/?$ blog/index.php [L] 
RewriteRule ^blog/(.+?)/(.+?)/?$ blog/index.php?post=$2 [L] 
RewriteRule ^blog/(.+?)/?$ blog/index.php?tags=$1 [L] 
+0

感谢您的回复! – user182666 2009-12-29 00:55:26