修改 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]
) 规则。
当添加新的RewriteRule
s 时,您可能希望使用 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更简洁友好