【问题标题】:Wordpress custom permalinks using .htaccess使用 .htaccess 的 Wordpress 自定义永久链接
【发布时间】:2016-04-21 20:26:03
【问题描述】:

目前,我通过管理员中的永久链接设置为帖子前置链接 /post/%post_id% 添加了自定义结构。

由于我需要重写类别、标签和作者页面的永久链接,如下所示:

类别

当前/post/category/category_name/category_name

标签

当前/post/tag/tag_nametag/tag_name

作者

当前/post/author/author_username/author/author_username

我尝试在 .htaccess 中创建自定义 RewriteRule,但根本不起作用:

RewriteRule ^/([^/]*)$ ./post/category/$1 [L]
RewriteRule ^/tag/([^/]*)$ ./post/tag/$1 [L]
RewriteRule ^/author/([^/]*)$ ./post/auhtor/$1 [L]

非常感谢任何有关 .htaccess 规则编码以实现此类永久链接的帮助。

【问题讨论】:

  • 你没试过吗?
  • @MikeRockett 到目前为止 pastebin.com/4uDvZMn3 但对我不起作用。
  • 你的RewriteRules 倒退了。
  • @AndrewCheong 你的意思是它应该 RewriteRule ./post/category/([^/]*)$ ^/$1 [L] 代替?
  • WordPress 不处理类别和标记永久链接吗?如果我没记错的话,它有“类别库”和“标签库”的选项。虽然不确定作者。 (注意:我根本不使用 WordPress,所以这是我的记忆。)

标签: php wordpress .htaccess


【解决方案1】:
  1. 确保在 apache 配置中启用了重写引擎
  2. 使用管理权限登录您的 WordPress,然后转到设置 -> 永久链接,如附加的三张图片所示。
  3. 如果永久链接未更新,则说明您没有网站根目录的写入权限或未启用 apache 的重写模块。
  4. 如果出现永久链接消息,则表示它还在 WordPress 站点的根目录中创建了 .htaccess。

这样就可以实现以下url格式:

类别

category/category_name

标签

tag/tag_name

作者

/author/author_username

注意:为类别添加前缀始终是最佳实践, /category 前缀应添加到路径中,而不是直接添加 访问它是因为 wordpress 有可以访问的页面和帖子 一般直接不加前缀。

【讨论】:

  • 好吧伙计,这里的目的是让它工作,即使你必须遵循 WordPress 的 abc。我亲自在我的办公桌上对其进行了测试,它的工作原理与上述完全相同。
  • 不知道为什么这会被否决。作者显然没有说明他曾在管理员中尝试过,这是一个很好的答案。
【解决方案2】:

我没有用 WordPress 测试,而是用 http://htaccess.mwl.be/

你已经很接近了:

RewriteRule ^([^/]+)$ /post/category/$1 [L]
RewriteRule ^tag/([^/]+)$ /post/tag/$1 [L]
RewriteRule ^author/([^/]+)$ /post/author/$1 [L]

【讨论】:

    【解决方案3】:

    我没有用 WordPress 测试,而是用 http://htaccess.mwl.be/

    Options -MultiViews
    RewriteEngine On
    RewriteBase /
    RewriteRule ^/([^/]*)$ ./post/category/$1 [L]
    RewriteRule ^/tag/([^/]*)$ ./post/tag/$1 [L]
    RewriteRule ^/author/([^/]*)$ ./post/auhtor/$1 [L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    

    【讨论】:

    • 如果这个 .htaccess 文件不起作用,请检查 。 mod_rewrite 是否已启用。谢谢。
    【解决方案4】:

    如果您不是在做一个非常高性能的项目,我强烈建议 noch 使用 Wordpress 标准 .htaccess 并使用 Wordpress 内部函数来完成相同的任务。尽管项目更干净,但这也会使您的解决方案 Web 服务器不可知(谁知道您是否想在未来切换到 NGINX 或其他东西)。

    应该对您有很大帮助的 Wordpress 主要功能是add_rewrite_rule。例如,您的类别链接可能如下所示:

      // place this rule inside function.php
      add_action("init", function() {
          add_rewrite_rule('^([^/]+)/?', 'index.php?category_name=$matches[1]', 'top');
      });
    

    尽管您应该记住,正则表达式应该有其他“顶级”对象的例外。

    来自 wordpress 文档的重要说明: 添加新规则后,您必须刷新规则表:从 WordPress 管理屏幕中,选择设置 -> 永久链接,然后单击保存更改而不进行任何更改。

    还有一个名为Rewrite 的插件可用。由于很久没有更新,我不建议在生产中使用它,但它的代码可以作为灵感的来源。

    【讨论】:

    • 我使用默认结构 /?cat=$id 因此,将规则修改为 index.php?cat=$matches[1] 不起作用。当尝试 /$id 我重定向到主页 index.php。有什么建议吗?
    • 我的正则表达式有问题。现在修好了。
    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多