首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在WordPress的add_rewrite_rule()中使用RewriteCond

add_rewrite_rule() 是 WordPress 中用于添加自定义重写规则的一个函数,它允许开发者创建更加友好的 URL 结构。而 RewriteCond 则是在 .htaccess 文件中使用的 Apache 服务器的重写条件指令,它用于指定在应用重写规则之前需要满足的条件。

基础概念

add_rewrite_rule():

  • 这个函数用于向 WordPress 的重写规则堆栈中添加一个新的规则。
  • 它通常用于创建自定义的伪静态 URL。
  • 规则定义了如何将一个 URL 重写到另一个 URL。

RewriteCond:

  • RewriteCond 是 Apache 的 mod_rewrite 模块中的一个指令,用于设置重写规则的条件。
  • 它可以用来限制重写规则的应用范围,例如只对特定的请求方法、特定的用户代理或特定的查询字符串应用规则。

相关优势

  • 用户体验: 更友好的 URL 可以提高用户体验,使网站看起来更专业。
  • SEO: 搜索引擎优化友好,因为简洁明了的 URL 更容易被搜索引擎理解。
  • 安全性: 可以通过重写规则来隐藏实际的文件路径,增加一层安全保护。

类型与应用场景

类型:

  • 伪静态 URL: 将动态 URL 转换为看起来像静态页面的 URL。
  • 自定义参数: 根据 URL 中的特定部分传递参数到 WordPress 内部。

应用场景:

  • 博客文章: 将 example.com/?p=123 重写为 example.com/my-first-post/
  • 产品页面: 将 example.com/shop/product?id=456 重写为 example.com/shop/my-product/

示例代码

假设你想将所有形如 example.com/year/month/day/post-name/ 的 URL 重写到 WordPress 的默认查询结构,可以使用以下代码:

代码语言:txt
复制
function custom_rewrite_rules() {
    add_rewrite_rule(
        '^([0-9]{4})/([0-9]{2})/([0-9]{2})/([^/]+)/?$',
        'index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]',
        'top'
    );
}
add_action('init', 'custom_rewrite_rules');

.htaccess 文件中,你可能需要添加 RewriteCond 来限制规则的应用,例如:

代码语言:txt
复制
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

遇到的问题及解决方法

问题: 添加了重写规则后,某些页面无法访问或出现 404 错误。

原因:

  • 可能是因为重写规则与现有的规则冲突。
  • 或者是因为服务器没有正确配置 mod_rewrite 模块。

解决方法:

  1. 确保 RewriteEngine 已经开启。
  2. 检查是否有其他 .htaccess 文件中的规则干扰了你的规则。
  3. 使用浏览器的开发者工具查看网络请求,确认 URL 是否按照预期被重写。
  4. 清除 WordPress 的缓存和浏览器缓存,有时缓存会导致规则不生效。
  5. 如果使用的是共享主机,可能需要联系主机提供商确认 mod_rewrite 是否启用。

通过以上步骤,通常可以解决大多数与 WordPress 重写规则相关的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

在 WordPress 中如何使用 Date 和 Time

PHP 提供很多 date/time 函数,但是 WordPress 有自己的一套,下面讲解下 WordPress 中使用 Date 和 Time 的经验和坑。...时区 - Timezone 使用 date/time 第一个的要注意的时时区,很多错误都是因为这个引起的,比如定时发布的文章在错误的时间发布了(比如你想是北京时间明天早上8点发布的,但是发布在格林尼治时间早上...WordPress 后台是可以让你设置时区的,在 设置 > 常规,并且可以使用下面代码获取: $timezone_offet = get_option( 'gmt_offset' ); 如果你的时间戳是...Date 和 time 格式 WordPress 让我们在 设置 > 常规 修改默认的时间格式,所以我们尽量在代码使用这个格式,而不要使用 date() 来生成,除非你自己要生成特殊的格式。...PHP 中可以使用 Date 和 Time 做很多事情,但是一定要用 WordPress 方式使用它们。

1.5K10
  • 在 WordPress 中使用 UUID

    今天简单介绍一下 UUID 和在 WordPress 中的使用: 什么是 UUID UUID,是Universally Unique Identifier的缩写,UUID出现的目的,是为了让分布式系统可以不借助中心节点...版本1:基于时间 通过当前时间戳和机器MAC地址生成,由于在算法中使用了MAC地址,这个版本的UUID可以保证在全球范围的唯一性。...不过,在UUID的规范里面没有明确地指定,所以基本上所有的UUID实现都不会实现这个版本。...SHA1 在 WordPress 中使用 WordPress 在 4.9 版本的时候引入了一个判断 UUID 的函数 wp_is_uuid,他有两个参数,uuid 和 version,他可以判断 uuid...中没有创建 UUID 的函数,所以我在 WPJAM Basic 中实现了创建 UUID 的函数: function wpjam_create_uuid(){ $chars = md5(uniqid

    42030

    WordPress 教程:在 WordPress 中如何设置定时作业

    其实 WordPress 本身也有类似于 Cron 的功能,让我们可以直接在 WordPress 中定义和执行定时作业,WordPress 把这个功能定义为:WP-Cron,比如 WordPress 本身的文章预发布功能就是基于...: 在该界面,可以立即执行定时作业,也可以删除,或者直接新增定时作业。...定义定义作业 WP-Cron 支持两种类型的定义作业: 单一的未来事件(比如设定某篇文章在将来某个时间发布) 重复发生的事件,比如每天或每个星期等一段时间内重复发生的事件(比如定时清理无用的信息) 定义单一的未来事件...wp_next_scheduled 检测 wpjam_daily_function_hook 是否已经被加入到定时作业列表中,如果没有,我们使用 wp_schedule_event 函数加入,这样可以确保作业只被定义一次...在 WPJAM Basic 定时作业管理后台加入: 这里非常好理解,就不再想讲,只是后通过界面添加的方式,暂时不支持参数,即 $args 参数。

    2.4K20

    Canonical 标签以及在 WordPress 中的应用

    ,都是“Canonical 标签以及在 WordPress 中的应用”这篇日志的内容,对于搜索引擎来说,这样两个不同的 URL 是无法判断是同一篇日志的,搜索引擎为了更多收录内容,就会同时收录这两个链接...WordPress 默认支持 Canonical 标签 在 WordPress 2.9 之前,让 WordPress 博客支持 Canonical 标签是需要通过插件或者手工修改主题的 header.php...> 在 WordPress 2.9 发布之后,WordPress 已经默认支持这一标签了,我们无需做任何动作,主题就支持这一标签。...标签,而又没有在 WordPress 中屏蔽默认的 filter 的话,则会输出重复的 Canonical 标签。...个人建议使用 WordPress 默认输出的 Canonical 标签已经足够了。 ----

    94920

    WordPress 教程:在 WordPress 中如何序列化数据

    serialize() 和 unserialize() 函数有个问题,在序列化的时候,不会判断是否已经序列化过了,或者在序列化数组恢复成数组的时候,也不会判断这是不是序列化数组。...WordPress 如何序列化数据 所以 WordPress 做了一些改进,创造了 maybe_serialize() 和 maybe_unserialize() 这两个函数,用法和 serialize...但是: maybe_serialize() 在进行序列化的时候,如果要序列化的数组或对象已经被序列化过了,就不会再次进行序列化,直接返回已经序列化的字符串。...为了判断是否为已经序列化,所以 WordPress 还有两个函数: is_serialized( data, strict = true ):检查 is_serialized_string( data...is_serialized( $data ) ) { if ( is_serialized_string( $data ) ) { // do something } } 另外,很重要一点,但是 WordPress

    2.1K20

    WordPress 技巧:在 WordPress 中如何判断移动设备访问

    我前面介绍过 Mobile Detect 这个 PHP 类库,它可以用来检测移动设备环境,它有一个非常完整的库,可以检测出所用的设备类型(包括操作类型,以及手机品牌等都能检测)和浏览器的详细信息。...但是如果只是简单的判断下当前浏览博客的设备是否为移动设备,那么我们可以使用 WordPress 默认的函数 wp_is_mobile 函数来判断,但是这个函数有个问题,它把 iPad 也算作移动设备,但是...iPad 设备比较大,有时候我们仅仅希望在手机看到不同的设计和功能,所以我重新写了一个 wpjam_is_mobile 函数,去除了 iPad : function wpjam_is_mobile()...return true; } else { return false; } } 并且 wpjam_is_mobile 函数已经整合到 WPJAM Basic 插件中。

    1.5K20

    WordPress 教程:在 WordPress 后台使用 ThickBox 制作弹出窗

    最近在项目中进行 WordPress 后台开发的时候,需要制作弹出层,经过一轮测试,发现还是 WordPress 原生已支持的 ThickBox 比较方便。...WordPress 的 ThickBox jQuery 库 WordPress 后台自带的 ThickBox 库是经过 WordPress 修改的,比如目前插件更新提示的详情链接就是使用 ThickBox...WordPress 后台自带的 ThickBox jQuery 库有两种使用方式: iframe 模式:在弹出层中加载另外一个网页。...inline 模式:在弹出层中加载 HTML 片段 下面分别详细讲讲这两种模式的详细使用方法: iframe 模式 的 href 属性即为 iframe 要加载的页面,TB_iframe 参数指定的是 ThickBox 的 iframe 模式,width 参数指定了弹出层的宽度,height 参数指定了弹出层的高度

    82250

    apache rewritecond_hfile数据格式中的data字段用于

    RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能,为了方便理解...Rewirte模块规则集的处理 当mod_rewrite在这两个API阶段中开始执行时,它会读取配置结构中配置好的 (或者是在服务启动时建立的服务器级的,或者是在遍历目录采集到的目录级的)规则集,然后...2)%N:RewriteCond后向引用,其中(0 RewriteCond的模板中的括号中的模板在当前URL中匹配的数据。...使用这个标记,可以把某些远程成分映射到本地服务器名称空间, 从而增强了ProxyPass指令的功能。 注意: 要使用这个功能,代理模块必须编译在Apache服务器中。...这些变量可以在其后许多情况下被间接引用,但通常是在XSSI (via ) or CGI (如 ENV{’VAR’})中, 也可以在后继的RewriteCond指令的pattern中通过%{ENV:VAR

    4.5K10

    在WordPress 的文章或页面中运行PHP 代码

    如果你在编辑器中输入PHP 代码,默认的话WordPress 不会为你执行这段代码的——只会文本方式输出。...Tutsplus 上有一篇文章以插件的方式告知我们实现在WordPress 的文章或页面中运行PHP 代码的方法,下面介绍下。...原理小介绍 懂php 的都知道,PHP中载入其他PHP文件可以用include() 或者 require() 函数,因此为了实现在WordPress 的文章或页面中运行PHP 代码,我们可以将打算运行的代码写入一个额外的...> 上诉代码中的变量 $upload_dir['basedir'] 指代的是WordPress 中多媒体文件的上传路径(默认为/wp-content/uploads/),接下来通过一个实例说明如何使用这个短代码插件...那么此时,在WordPress 编辑器中写文章时候用下面的短代码插入短代码: [phpcode file="wordsbackward"] 即可运行相应的wordsbackward.php文件,如图:

    4.6K100

    在WordPress中优化谷歌(AdSense)广告联盟

    image.png 自从前段时间谷歌广告联盟通过以后,也算是比较关注的了 今天来说一下优化吧,在说优化之前,先说一下WordPress常用的页面判断 很多时候我们需要将某些内容在指定的页面中显示,比如将谷歌自动广告设置为不在首页显示...> 我们可以用is_home()来判断是不是WordPress的首页,但是有一点需要注意,当你的首页不是默认的index.php的时候,比如是在后台指定了一个页面,这种情况下is_home()也会失效...有几个页面没有开启评论功能,所以就报错了 尝试一下是不是因为没有开启评论造成的,然后找了一下WordPress的函数,comments_open()可以判断是否开启评论 结果还真的正常不报错了,哈哈 我将谷歌广告和熊掌号的信息都移到了页面底部,所以你也可以将这些更改加载footer.php文件中的合适位置,当然你加在header.php中也没有问题 沈唁志...原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:在WordPress中优化谷歌(AdSense)广告联盟

    1.2K30

    Sass 与Compass 在WordPress 主题开发中的运用

    这篇文章主要是小讲Sass 与Compass 在WordPress 主题开发中的运用,核心的技术Sass 自然不会提及。因此,如果你想要这篇文章对你有用的话,最好是先接触下Sass。...style.css 在根目录的问题 熟悉WordPress 开发的自然知道style.css 对于一个WordPress 主题的重要性。...然而在Sass 与Compass 中,因为配置上的原因,一般是将scss 及css 文件放在以此命名的文件夹中,但WordPress 确是要style.css 放在主题根目录下。...style.css 的注释问题 按照WordPress 的开发要求,style.css 的头部必须有如下类似的主题相关信息(注释)供系统必要时使用: /* Theme Name: Bevework Theme...一个WordPress 的Compass 插件 这个是我在看《Sass与Compass实战》这本书的时候在作者的Github 上看到的,Github 地址点击这里。

    2K70

    在 WordPress 中如何定义字段依赖显示

    WPJAM Basic 插件作为我们「WordPree果酱」团队所有插件和项目的基础,其中表单字段的渲染就是其中最重要的一个能力,我们做到了只需配置就能使用,无需额外增加页面的 JavaScript...比如插件的「缩略图设置」页面,只需写表单字段的配置代码和字段之间上的显示依赖关系,除了插件本身的基础的数据比较代码之外,其他都是通过配置定义的。...定义了字段依赖关系之后,表单渲染的时候,字段显示就需要进行数据比较是经常进行的操作,当然我们可以使用 PHP 和 JavaScript 的比较操作符进行操作的,但是如果需要进行回调操作的时候,那就要有点麻烦了...wpjam_compare 函数同样定义了 JavaScript 版本,参数和使用方法一样,不再重复了。...args:可以指定要比较 item 中的哪个字段(key 指定),比较的方法(compare 指定),要比较的值(value 指定),说起来有点复杂,还是来看例子吧: wpjam_show_if($post

    8.5K20

    WordPress 教程:使用 WP_Http 在 WordPress 中发起 HTTP Request

    在 PHP 中发起 HTTP 请求并不是很难,有很多种方法:使用 fopen() 函数,使用 cURL 扩展,使用文件操作函数如 fsockopen() 和 fwrite()等,但是问题是各种方法所依赖的服务器的配置把不同...PHP 类:WP_Http WordPress 2.7 开始引入了一个新的 PHP Class:WP_Http(在 wp-includes 目录 http.php 文件中)。...和你使用浏览器看到一样的。...WordPress 加入 WP_Http 类之后,就放弃了 Snoopy 这个 PHP Class,所以建议大家给 WordPress 写插件的时候,尽量使用 WP_Http 来做 HTTP 请求。...WordPress 已经可以认为是 PHP 框架了,它含有各种类和方法,并且接口和方法使用非常简单,并且文档化,所以使用 WordPress 作为 PHP 框架进行开发,或者抽取 WordPress 中的一些类进行开发会起到事半功倍的效果

    48720

    在WordPress中使用Markdown进行写作的正确姿势

    前言 在wordpress中使用markdown语法来进行写作,是很多wordpress博主都要想到的一点。...代码高亮 通过上面步骤的复制粘贴,在wordpress文章中可以正常显示,但是可能会出现一些问题,那就是代码不能够高亮。原因很简单,是因为我们没有相应的css文件。 ?...如果你在vscode中对公式进行了渲染,将渲染好的公式的html文件粘到wordpress文章中的文本中,你会发现: 这没有什么卵用!!!...然后在可视化窗口中,利用wordpress中的QuickLatex插件编写相应公式到相应位置就可以了。...图片显示 引用图片链接即可,可以使用图窗工具,也可以自己搭建。网上有很多优秀的图云网站,收费或不收费。 总结 这篇文章只是我为了在wordpress比较舒服地写文章的一些方法的尝试。

    14.8K92

    WordPress 技巧:如何修改自定义日志类型的固定链接

    如果你使用过 WordPress 自定义日志类型(Custom Post Type)的话,一定发现自定义类型日志的的固定链接(Permalink)是不受制于后台 > 设置 > 固定链接中为 Post 置顶的链接格式...假设你已经创建了一个 book 的自定义日志类型,将其固定链接设置为:/book/post_id/,在当前主题的 functions.php 文件中添加如下代码: add_filter('post_type_link...link; } } add_action( 'init', 'wpjam_book_rewrites_init' ); function wpjam_book_rewrites_init(){ add_rewrite_rule...post_type=book&p=$matches[1]', 'top' ); } 添加好之后,这个固定链接是不会立刻生效的,需要到 后台 > 设置 > 固定链接 点击下保存按钮,刷新 WordPress...的 Rewrite 缓存。

    67330
    领券