我在Pantheon上运行的WordPress站点,该站点使用Nginx。.htaccess文件中的重写规则被忽略,因此需要将其放置在wp-config.php中。我的正则技能或多或少不存在,我需要将这些重写规则转换为PHP:
rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?.xml$ "/index.php?xml_sitemap=params=$2" last;
rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?.xml.gz$ "/index.php?xml_sitemap=params=$2;zip=true" last;
rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?.html$ "/index.php?xml_sitemap=params=$2;html=true" last;
rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?.html.gz$ "/index.php?xml_sitemap=params=$2;html=true;zip=true" last;
有人可以指向正确的方向吗?
一些注释。
首先,关于last
标志,直接从Apache文档重写:
[L|last]
标志使mod_rewrite
停止处理规则 放。在大多数情况下,这意味着如果规则匹配,则无需 规则将被处理。这对应于perl中的最后一个命令, 或C中的Break命令。使用此标志表示当前 不考虑进一步规则的情况下应立即应用规则。
这是last
的更多详细信息。
因此,您必须实现的模式应该看起来像switch
语句或一系列if-elseif
s。
但是,Nginx Wiki说使用"如果"是邪恶的。建议改用try_files
。
另请参见/进一步的参考:
- 万神殿文档:使用PHP作为HTACCESS替代品
- 万神殿文档:查看更多重定向方案
- 从"如果"转换nginx重写。到" try_files"
这就是我使用的。使用卷曲来替代不同的URL路径。与Drupal和WordPress一起使用。https://github.com/mpaladino/pantheon-htaccess-rewrites