修改 Wordpress 中默认生成的友好 URL(通过 .htaccess)

Posted

技术标签:

【中文标题】修改 Wordpress 中默认生成的友好 URL(通过 .htaccess)【英文标题】:Modify friendly URLs generated by default in Wordpress (via .htaccess) 【发布时间】:2013-12-29 18:41:19 【问题描述】:

我有一个在 Wordpress 中完成的网站,我需要对复杂的 URL 进行一些更改。

我从名为detail 的管理面板创建了一个页面,该页面从模板文件夹中读取模板文件detail.php

当前挂载的 URL 是 http://www.domain.com/detail/1234/,我需要它可以作为 http://www.domain.com/anything/1234/ 访问。

以下几行是由 Wordpress 生成的,但我不理解它们,也不知道如何修改它们以达到我的目的:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]
</IfModule>

【问题讨论】:

所以你想将/anythinghere/1234重定向到/detail/1234 您是否意识到,如果您这样做,您网站上的所有其他子页面都会损坏? domain.com/anything/1234 到 domain.com/detail/1234?由于所有页面都会重定向?此外,如果您只是想美化您的 URL,那么有很多轻量级/有用的插件可以为您做到这一点。 可以为这个页面制定规则吗?还有其他页面,但没有任何问题 @anubhava 此重定向会产生哪个 url?我该怎么做? 其实这是 WP 页面,我不建议搞乱重写规则,因为 WP 对您在 WP 设置中提供的永久链接结构非常严格。 【参考方案1】:

首先,您应该真正了解这些规则的作用以及您真正想要实现的目标。然后您可以尝试更改系统以满足您的需求。

IfModule 确保仅当存在mod_rewrite Apache 模块时才处理内部的所有内容。所有其他指令都来自这个模块。

    RewriteEngine On 启用 URL 重写。 RewriteBase / 告诉引擎规则在根内部运行。另请参阅how RewriteBase works 上的一般问题。 RewriteRule ^index\.php$ - [L] 表示如果要重写的当前 URL 是 index.php,则不应再处理规则 ([L])。不会发生重写。 RewriteRule 指令接受 regex。另请参阅 SO 上的 regex 标签。 所有RewriteCond 指令都适用于以下RewriteRule。除非添加[OR] 标志,否则必须同时满足它们才能执行规则。在这种情况下,它们的意思是: 请求的资源不是常规文件。 请求的资源不是目录。 将任何(至少一个字符长)URL 重写为index.php。这是要处理的最后一条 ([L]) 规则。

当添加新的RewriteRules 时,您可能希望使用 WordPress 的方式来执行此操作,如Zac’s answer 中所述。通过类比手册中或此处关于 SO 的许多示例找出正确的规则应该不难。

【讨论】:

【参考方案2】:

放入functions.php 可能更好:

functions.php

function setRewriteRule($orgRules)
    return array( '/([^/]+)/([0-9]+)/?' => 'index.php?post=$matches[1]' ) + $orgRules;


add_filter('rewrite_rules_array', 'setRewriteRule');

然后你只需要刷新重写规则,我通常使用'rewrite-rules-inspector'插件。

【讨论】:

如果您使用functions.php,请确保您的主题是子主题,否则它会在主题更新时消失。【参考方案3】:

这应该可以解决您的问题,试一试...您可以编写自己的自定义永久链接而无需添加任何代码,如果有人尝试通过旧 URL 访问该页面,他们将被重定向到新 URL。

WordPress Custom Permalinks

安装后,您只需进入页面并在标题下方输入您自己的网址

【讨论】:

以上是关于修改 Wordpress 中默认生成的友好 URL(通过 .htaccess)的主要内容,如果未能解决你的问题,请参考以下文章

wordpress 使用 htaccess 更改为带有变量的友好 URL

wordpress去掉category怎么操作让url更简洁友好

目录中的友好 URL

带有 SEO 友好网址的 Wordpress 博客 + Laravel

带有可选参数的 Liferay 友好 URL

在javascript中使用UTF-8编码生成友好的url [关闭]