具有自定义URL重写规则的WPNetwork

时间:2013-09-04 作者:Tim Plummer

我有一个主题,其中内置了一些自定义重写规则。问题是他们没有使用WP multisite。在我用来构建主题(在网络之外)的安装上,它工作得很好。当我将主题引入网络时,它不起作用。

funcitons.php

add_rewrite_rule(\'^prop/([^/]*)/?\',\'index.php?pagename=prop&mls=$matches[1]\',\'top\');

add_filter(\'query_vars\', \'add_mls\');

function add_mls($public_query_vars) {
    $public_query_vars[] = \'mls\';
    return $public_query_vars;
}

web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
    <rewrite>
        <rules>
            <rule name="WordPress Rule 1" stopProcessing="true">
                <match url="^index\\.php$" ignoreCase="false" />
                <action type="None" />
            </rule>
            <rule name="WordPress Rule 2" stopProcessing="true">
                <match url="^wp-admin$" ignoreCase="false" />
                <action type="Redirect" url="wp-admin/" redirectType="Permanent" />
            </rule>
            <rule name="WordPress Rule 3" stopProcessing="true">
                <match url="^" ignoreCase="false" />
                <conditions logicalGrouping="MatchAny">
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
                </conditions>
                <action type="None" />
            </rule>
            <rule name="WordPress Rule 4" stopProcessing="true">
                <match url="^(wp-(content|admin|includes).*)" ignoreCase="false" />
                <action type="Rewrite" url="{R:1}" />
            </rule>
            <rule name="WordPress Rule 5" stopProcessing="true">
                <match url="^([_0-9a-zA-Z-]+/)?(.*\\.php)$" ignoreCase="false" />
                <action type="Rewrite" url="{R:2}" />
            </rule>
            <rule name="WordPress Rule 6" stopProcessing="true">
                <match url="." ignoreCase="false" />
                <action type="Rewrite" url="index.php" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>
</configuration>        
现在,我看到的相似但不完全相同的部分是“Wordpress规则3”,在我的测试站点中,它如下所示:

<rule name="wordpress" patternSyntax="Wildcard">
    <match url="*"/>
        <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
        </conditions>
    <action type="Rewrite" url="index.php"/>
</rule>
所以我继续将规则从我的开发站点添加到网络中,但我仍然没有得到任何结果。有什么指示吗?

1 个回复
最合适的回答,由SO网友:Tim Plummer 整理而成

首先,我没有刷新重写规则,所以,或者说,规则没有被包括在内。

其次,我最终使用了一种更简单的解决方案,将变量传递到应用了模板的任何页面,这是add_rewrite_endpoint.

add_action(\'init\', \'my_add_endpoints\');

function my_add_endpoints()
{
    add_rewrite_endpoint(\'myendpoint\', EP_PAGES);

}
哦!重要信息-add_rewrite_endpoint 为您注册一个查询var,并将该var的值设置为紧跟其后的值。

因此,此url:

http://mysite.com/mypage/myendpoint/myvalue
成为:

http://mysite.com/index.php?pagename=mypage&myendpoint=myvalue
我花了两天的时间才最终弄清楚抄本上应该写些什么。我希望这对任何遇到它的人都有帮助。

结束

相关推荐