2010-08-09 37 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