Apache Mod-重写问题
我在名为blog的文件夹内有一个名为index.php的PHP脚本。有三种不同的观点。Apache Mod-重写问题
我想改变基于URL的看法http://www.myDomain.com/blog/index.php?post=name的http://www.myDomain.com/blog/index.php?tags=list。
- /博客重定向到数1以上
- /博客/名称的类别重定向到numbe 2以上
- /博客/名称的类别/名称的-交重定向到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/([^/]+)$
,而不是匹配除外/
任何字符。
你可以这样写:
RewriteRule ^blog/?$ blog/index.php [L]
RewriteRule ^blog/(.+?)/(.+?)/?$ blog/index.php?post=$2 [L]
RewriteRule ^blog/(.+?)/?$ blog/index.php?tags=$1 [L]
感谢您的回复! – user182666 2009-12-29 00:55:26
这是为了答复,我会记住的。 char – user182666 2009-12-29 01:00:39