你如何简单地将新的自定义重写添加到wordpress的.htaccess中?

时间:2009-04-12 07:45:06

标签: apache wordpress .htaccess mod-rewrite

我在wordpress中添加了一些额外的功能,以便我可以使用变量访问它并做额外的事情。

问题是,当我将丑陋的动态链接转换为.htaccess文件中可爱的permlink格式时,wordpress会覆盖它/忽略它。我听说有一种方法可以做到这一点,但我试图根据人们所说的方式做的方式仍然会返回404页面。我知道它指向的文件有效。

ppl说2种方式有效,但我对此并不高兴:

1)在#BEGIN wordpress部分上面插入规则 2)在某处使用add_rewrite_rule()wordpress函数

有没有人使用这些方法取得任何成功?或其他方法?

这是我的.htaccess文件的样子

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/ref/(.*)$ /index.php?ref=1&sid=$1 [NC]
</IfModule>


# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]


</IfModule>

在我的主题function.php中我也尝试添加:

add_rewrite_rule('/ref/(.*)$', 'index.php?ref=1&sid=$matches[1]','top');

没有成功。

我也在@ WordPress + mod_rewrite上尝试了解决方案而没有任何乐趣。

请帮忙! :)

任何想法?

4 个答案:

答案 0 :(得分:3)

这很有效 - 我刚试过它 - 注意我在RewriteRule的末尾加了一个L

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteRule ^/ref/(.*)$ /index.php?ref=1&sid=$1 [NC,L]

#wp
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

答案 1 :(得分:2)

新规则将始终覆盖旧规则

尝试以下

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

RewriteRule ^/ref/(.*)$ /index.php?ref=1&sid=$1 [NC]


</IfModule>

答案 2 :(得分:2)

在.htaccess文件中,您必须在RewriteRule指令的模式中保留前导斜杠。所以试试这个:

RewriteRule ^ref/(.*)$ index.php?ref=1&sid=$1 [NC]

答案 3 :(得分:1)

由于上述解决方案似乎不起作用,我最终在php中执行了以下操作。 .htaccess文件上的Wordpress统治权是至高无上的:

if(strstr($_SERVER['REQUEST_URI'], '/ref/')) {

从中可以做出相同的事情。一个漂亮的网址,可以翻译成其他内容。