【发布时间】:2009-12-29 00:11:44
【问题描述】:
我在名为 blog 的文件夹中有一个名为 index.php 的 PHP 脚本。共有三种不同的视图。
- http://www.myDomain.com/blog/index.php
- http://www.myDomain.com/blog/index.php?tags=list 类别
- http://www.myDomain.com/blog/index.php?post=name 的帖子
我想根据 URL 更改视图。
- /blog 重定向到上面的 1 号
- /blog/name-of-category 重定向到上面的 numbe 2
- /blog/name-of-category/name-of-post 重定向到上面的第 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]
这不起作用,我不知道为什么。现在它总是重定向到最后一个 URL:
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();
看到问题了吗?因为我的脚本的基本路径是“blog”,所以 mod_rewrite 正在重写我在程序中的所有引用。通过将我的脚本文件夹重命名为 blogScript,它解决了问题。
【问题讨论】:
标签: apache mod-rewrite url-rewriting