为什么主页内容不随此重写规则一起显示?

时间:2011-12-04 作者:meeble

我试图使用mod\\u rewrite将一个变量从URL传递到PHP,同时维护标准WordPress功能。

以下是我的mod\\u重写规则:

RewriteEngine On
RewriteBase /
RewriteRule ^(\\w+)/$ /index.php?state=$1 [L]
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
当我转到此URL时:http://epiclasers.com/arizona/

这显然是由索引处理的。php(因为正在加载主题)和状态变量正在传递给php。但是,我在显示主页内容时遇到了问题-相反,它显示的是404“未找到页面”内容。

有人能解释一下为什么会发生这种情况吗?

UPDATE:

当我使用R标志重定向时,它会正常工作:

RewriteRule ^(\\w+)/$ /index.php?state=$1 [R,L]
主页上提供:http://epiclasers.com/?state=arizona

似乎WP正在使用$\\u SERVER[\'REQUEST\\u URI\']获取URL来处理请求/查询,而WP被URL中的/亚利桑那州/弄糊涂了?

让我们假设mod\\u rewrite功能正常。有人知道如何自定义WordPress来忽略URL中的“/亚利桑那/”吗?

2 个回复
最合适的回答,由SO网友:meeble 整理而成

好吧,我终于弄明白了。正如我所想,这个问题与mod\\u重写无关,而与WordPress有关。

为了解决这个问题,我必须使用以下代码:

if(isset($_GET[\'state\'])) {
$url = explode("/", $_SERVER[\'REQUEST_URI\']);
$url = end($url);
$_SERVER[\'REQUEST_URI\'] = "/" . $url;
}
这段代码实际上从REQUEST\\u URI global中删除了“/arizona/”,并将其替换为“/”,这将迫使WP从索引中提供首页模板。php文件。固定的

也许你们中的一些人可以把这个答案投给我

SO网友:Olivier Pons

我想您忘记了QSA指令,以便正确添加查询字符串:

RewriteEngine On
RewriteBase /
RewriteRule ^(\\w+)/$ /index.php?state=$1 [QSA,L]
RewriteRule ^index\\.php$ - [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [QSA,L]
告诉我它是否有效,如果无效,我会尽力回答。

两个提示:


请尝试使用RewriteLog 指令:它帮助您追踪此类问题:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On
我最喜欢的检查regexp的工具:

http://www.quanetic.com/Regex (不要忘记选择ereg(POSIX)而不是preg(PCRE)!)

结束