The post-buckling solutions of non-uniform linearly and non-linearly elastic rods are constructed via a higher-order perturbation approach. For rods with continuously varying flexural stiffness, the onset of buckling and the post-buckling branches are determined employing a suitable set of admissible functions within the context of Galerkin's method combined with a regular perturbation approach. On the other hand, for piece-wise continuous rods, closed-form eigenvalue solutions are exploited as a basis for the non-linear post-buckling description. Closed-form conditions on the non-linearly elastic constitutive function for the bending moment are obtained ensuring supercritical or subcritical divergence bifurcations. Several illustrative examples are discussed highlighting the effects of the stiffness non-uniformity on the onset of buckling and the post-buckling non-linear regime as well as the influence of the non-linear elasticity on the latter.