WordPress RewriteRule在本地工作,但不在Web服务器上

时间:2013-07-10 02:40:50

标签: wordpress .htaccess

我想为我的插件页面使用自定义永久链接结构,所以我使用add_rewrite_tag和add_rewrite_rule来完成此任务。在我的本地开发服务器上一切正常,但在我的网络服务器上,我无法正确地重定向WordPress。

使用add_rewrite_rule后,我的htaccess文件会更新为以下行:

RewriteRule ^portfolio/([^/]*)/? /site/index.php/portfolio/?portfolio_item=$1 [QSA,L]

在我的开发服务器上,如果我转到URL 127.0.0.1/site/portfolio/testing/,这样可以正常工作。在我的网络服务器上,当我访问www.mydomain.com/site/portfolio/testing/时,我不断得到“这有点尴尬,不是吗?”屏幕。我在我的本地开发服务器上也遇到了这个错误,直到我刷新了我的重写规则。刷新Web服务器上的重写规则无济于事。

如果我输入网址www.mydomain.com/site/index.php/portfolio/?portfolio_item=1它可以正常工作,那么问题必定是RewriteRule没有正确重写。但经过多次测试,我可以看到重写规则没问题。它与WordPress有关。

为了测试,我创建了一个phpinfo.php文件并将RewriteRule更改为:

RewriteRule ^portfolio/([^/]*)/? /site/phpinfo.php [QSA,L]

这很有用。所以我有点难过为什么我的网络服务器上的WordPress不遵守这个RewriteRule,而只是在重定向到index.php时。或者它可能是有干扰的东西?我基本上很难过,而且我一直在努力调试这一整天。我真的可以帮忙......

编辑:这是完整的.htaccess文件:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /site/
RewriteRule ^index\.php$ - [L]
RewriteRule ^^portfolio/([^/]*)/? /site/index.php/portfolio/?portfolio_item=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /site/index.php [L]
</IfModule>
# END WordPress

1 个答案:

答案 0 :(得分:0)

对于有类似问题的人,我明白了。基本上,我正在重写已经重写的URL。原始重写:

RewriteRule ^portfolio/([^/]*)/? /site/index.php/portfolio/?portfolio_item=$1 [QSA,L]

更改为:

RewriteRule ^portfolio/([^/]*)/? index.php?page_id=31&portfolio_item=$1 [QSA,L]