我试图使用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中的“/亚利桑那/”吗?
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)!)