2010-08-09 76 views
1

目前,我有一個標準安裝的WordPress 3.0,而.htaccess文件看起來是這樣的:Wordpress,.htaccess和mod_rewrite:如何添加重定向規則?

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

我想重寫URL,這樣我可以提供一些自動生成的頁面,但內保持WordPress的主題。例如,前往/event/123/應從我的數據庫中提取事件#123的詳細信息,而不在Wordpress中存在頁面。

我想我可以在WordPress的創建一個「一般事件」頁面,並把它帶一個參數,如(例如/event/generic/):

RewriteRule ^event/(\d+)/$ /event/generic/?q=$1 [L] 

然而,這似乎並沒有工作,它只需要我到Wordpress 404頁面。我在想,我可能會在這裏問很多WordPress,但肯定有可能嗎?

我想到的唯一的其他解決方案是在主題內部破解404.php。

更新

.htaccess看起來是這樣的:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^eventtest/(\w+)/$ /events/event-single/ [L] 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

如果我當時去/eventtest/testing/,則:存在於WordPress的

$_SERVER['REQUEST_URI'] is /eventtest/testing/ 
$_SERVER['REDIRECT_URL'] is /events/event-single/ 

/events/event-single/頁,但如果我去/eventtest/testing/,我得到一個404頁面。

回答

0

該規則看起來不錯。但請確保您將該規則放在Wordpress的全部規則之前,以便在Wordpress的最後一條規則捕捉到請求之前將其重寫。所以嘗試:

RewriteRule ^index\.php$ - [L] 
RewriteRule ^event/(\d+)/$ /event/generic/?q=$1 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
+0

我試過了,不幸的是它仍然進入Wordpress 404頁面。 RewriteRule是可以的,因爲發送它到test.php工作得很好。我認爲這裏的關鍵是我想重定向到Wordpress中不存在的頁面,並「假」一個頁面。 例如,如果我在Wordpress中創建一個/ test /頁面,這會產生一個404頁面: RewriteRule^event /(\ d +)/ $/test/[L] – 2010-08-11 08:05:19

+0

@Sam Starling:Does */event/generic/*是否存在? – Gumbo 2010-08-11 08:10:47

+0

我已經添加了一個上面的示例,應該稍微澄清一些事情。 – 2010-08-11 09:57:06