2009-12-29 170 views
0

我在名爲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,它解決了問題。

回答

1

在正則表達式,.任何字符(包括/字符)匹配,從而嘗試做^blog/([^/]+)$,而不是匹配除外/任何字符。

+0

這是爲了答覆,我會記住的。 char – user182666 2009-12-29 01:00:39

1

你可以這樣寫:

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