【问题标题】:How can I rewrite a path to a querystring in a wordpress permalink URL?如何在 wordpress 永久链接 URL 中重写查询字符串的路径?
【发布时间】:2013-11-02 00:38:25
【问题描述】:

我需要重写一些 wordpress 永久链接,以便 site.ca/anypage/page/anytab 重写为 site.ca/anypage/?pagetab=anytab。我已经尝试了一堆我认为应该可以工作的重写,但 wordpress 只是在完整输入的 URL 上给我一个 404(而不是正确的查询字符串页面)。

这是我到目前为止所得到的(使用特定页面进行测试,而不是 anypage/page/anytab:

RewriteRule ^community-alumni/conference-services/page/(.*)$ community-alumni/conference-services/?pagetab=$1 [L]

这个重写只是给我一个 404 错误但是,我知道正则表达式,至少是通过了,因为如果我将重写更改为 R=301,L 重定向,那么页面会重定向到查询字符串的页面并拉起适当的内容,即:

RewriteRule ^community-alumni/conference-services/page/(.*)$ community-alumni/conference-services/?pagetab=$1 [R=301,L]

重定向到community-alumni/conference-services/?pagetab=summer-hotel 并拉入页面内容。所以我不明白为什么应该与查询字符串 URL 相同的内容的重写是 404 - 我觉得它与 wordpress 有关?在 wordpress 中 .htaccess 我在 RewriteBaseRewriteRule ^index\.php$ - [L] 之前进行了这个重写

感谢任何帮助。谢谢。

【问题讨论】:

    标签: wordpress apache mod-rewrite url-rewriting permalinks


    【解决方案1】:

    我感觉这和 wordpress 有关系?

    可能是这样,而且我确信 wordpress 有一些内部方法可以使用他们的重写 API 和(可能)post_rewrite_rules 钩子来处理它。 (更多信息请访问wordpress stack exchange

    但如果这不起作用,您可以随时尝试使用 P 标志在内部代理请求,以便 wordpress 控制器看到的 REQUEST_URI 是在 /page/ 之后没有所有东西的那个(很可能是导致 wordpress 呕吐的原因。

    RewriteRule ^community-alumni/conference-services/page/(.*)$ /community-alumni/conference-services/?pagetab=$1 [L,P]
    

    【讨论】:

    • 感谢您的回复。我打算使用 WP Rewrite 但我必须将其重写到 WP 页面,例如 index.php?pagename=page-slug 在那里我将无法轻松地从正则表达式中捕获的路径中获取 slug ...您的建议正在使用我必须将服务器添加到重写的例外,否则它会带回 /Applications/MAMP/htdocs/... 而不是 'http : //localhost:8888/...` - 不过这很好,我可以在实时 .htaccess 上更改它.请更新您的答案,以便我接受。
    • 我也修改了它以回答anypage/page/anytab的原始问题 - 这是最后的重写:RewriteRule ^(.*)/page/(.*)$ http ://localhost:8888/site/$1/?pagetab=$2&pagepath=$1 [P,L]
    • @tsdexter 那是我的错。您只需在前面添加一个/ 即可使URI 成为绝对的
    • 实际上必须添加 /site/ 才能使其正常工作 - 实时站点存在于根目录中,而不是 /site/ - 有没有办法可以在其中使用 RewriteBase,而不是添加 @987654333 @ 因为 RewriteBase 在本地设置为 /site/,在实时设置为 /
    • @tsdexter 是的,您可以使用 RewriteBase /site/ 并将其更改为实时站点上的 RewriteBase /,但是您需要删除重写规则目标前面的 / (就像我编辑答案之前的方式一样)。
    猜你喜欢
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多