WordPress全站添加SSL免费证书开启HTTPS

大家好,最近把achair教程网全站添加了SSL,网址从http://www.xiaored.net,变成了https://www.xiaored.net 前缀变成了https,并且在谷歌浏览器地址栏前面变成了绿色的“安全”,如图:

未分类

简单的说https是安全的http,是经过加密的,百度,淘宝,京东,苹果这些网站都是https的,特别是在线购物的网站建议使用https。下面说说为什么要安装https?

1. 百度搜索排名:
从相关性的角度,百度搜索引擎认为权值相同的站点,采用https协议的页面更加安全,排名上会优先对待。

2. 谷歌浏览器:
从2017年1月份起,Chrome浏览器将会把采用HTTP协议的网站标记为“不安全”网站。

3. 谷歌搜索排名:
谷歌早已宣布采用HTTPS加密协议的网站将会在搜索结果中优先显示。

4. 等等

下面分享下我的网站是如何操作的,先说下我的网站配置以及使用到的工具:

  1. 阿里云ECS的服务器,Nginx

  2. 七牛云的SSL和CDN

  3. WordPress网站,BeTheme主题,Super Cache缓存

  4. DNSPod域名解析,WinSCP服务器管理工具

具体操作经验分享,请到《WordPress公共课》查看:

https://www.xiaored.net/wordpress-commonality/

使用SMTP插件解决WordPress注册邮件无法发送的问题,解决过程总结分享!

最近在鼓捣一个wordpress博客(美文风网 ),但是遇到一个小问题,那就是wordpress本身不带邮件发送功能,需要使用SMTP插件和第三方邮箱系统实现发送邮件功能!

选择插件和第三方邮件SMTP服务

插件呢,我试用了几款,不是设置复杂,就是好久没更新了,最后终于找到一个设置简单的SMTP插件: https://wordpress.org/plugins/configure-smtp/

中国国内使用QQ邮箱的人很多,所以我也选择了QQ邮箱的SMTP服务低,当然你也可以选择其他的,根据自己情况定。

QQ邮箱的SMTP服务是默认关闭的,需要我们在邮箱的设置中开启,最新的QQ邮箱使用了授权码代替了原有的QQ密码,所以在密码一栏中需要填写SMTP的授权码。

好了,我安装好SMTP插件和开启好QQ邮箱的SMTP服务之后,就对插件Configure SMTP进行设置就行了,按照下面的图片说明进行设置就行!(图片来自大前端博客,在此感谢!)

未分类

当然我们设置好之后记得发送一个测试邮件,看下是否成功。在Configure SMTP插件最下边有test e-mail按钮,根据提示测试就行!

希望对大家有用!

Nginx下修改WordPress固定链接设置后无法访问

用WordPress肯定是要用固定链接,不仅目录清晰,而且利于SEO。当你用Apache做Web服务器的时候自然是没什么问题,只需要在设置-固定链接设置中选择一下就好了,不过当你用Nginx的时候,就有点小问题了,当你选固定链接的时候,你的网站会无法访问。

未分类

以下文章主要介绍了Nginx下修改WordPress固定链接导致无法访问的问题解决,同时作者也给出了官方关于修改固定链接的方法,需要的朋友可以参考下:

wordpress提供多种类型的链接形式

未分类

我选择了自定义。下面就出现了修改固定链接后,访问文章会出现404错误,以前我用apache做web服务器,所以只要apache下就三个关键,即

wordpress对目录下的.htaccess拥有读写权限

固定链接的目录结构需要 Apache服务器的mod_rewrite模块支持,所以在Apache配置文件httpd.conf中将 LoadModule rewrite_module modules/mod_rewrite.so设置为启用。

同样是Apache配置文件,其中对于站点目录下的AllowOverride None的参数设置为All。当然修改完配置后,一定要重启Apache服务。

由于是新配置的本地测试环境,2、3两项问题同时出现,逐项更正设置后,固定链接的工作正常。

现在我用的nginix,所以也要修改nginix的ngnix.conf配置文件,让其支持重定向。

假设我的wordpress博客是的 server{}段是直接放到放到了nginx.conf (有的人为了方便管理,都习惯在单独写个vhost/目录来存放每个网站的配置文件,这就要根据你自己的设置来添加了)

vi /your_nginx_path/conf/nginx.conf

按照nginix的正则表达式的规则,可参考:Nginx 的中文维基

  • ^:匹配输入字符的开始位置

  • $:匹配数日字符串的结束位置

  • +:匹配前面的子表达式一次或者多次

  • [0-9]:数字字符范围

  • $1:调用变量

在server{} 字段 中的 “root /websit/wwwroot/;”(这行就是指定网站所在目录的) 这一行的下面 ,添加下面的内容:

if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;//这行是为了防止打开后台、插件页等打不开的。

保存后,输入 /etc/init.d/nginx restart , 重启nginix。就ok了!

相当于告诉nginix访问这些后按照正则表达式转到其唯一正确的地址,以此打开文章。

貌似/%postname%/会以中文为链接,为了seo,可以考虑一个插件 WP Slug Translate,它会自动换中文标题为英文,不能联网就改为拼音。

貌似官方给出了新的pha100 pha-3,也简单的多。这里假设,我在nginx的conf文件夹下创建个wordpress.conf ,将下面的代码粘贴进去:

location / {
try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;

我的博客nginx虚拟机配置文件在 conf/vhost/www.dabu.info.conf 。同样,在root 那行下面,添加一行:

include wordpress.conf;

接着重启nginx就可以正常访问了。

Docker 搭建 WordPress博客

作为一个docker初学者,几乎第一个案例都是docker轻松搭建一个WordPress,关于WordPress是什么,用来做什么,建议自行百度,下面直接讲解搭建步骤:

使用的ubuntu16.04,每次都要加sudo,我索性直接使用root用户操作。

1、下载MySQL镜像,使用docker命令:docker pull mysql ,我下载的有400多M还是有点慢,需要耐心等待

MySQL下载完毕

2、启动MySQL镜像

docker run --name mysql_db -e MYSQL_ROOT_PASSWORD=123456 -d mysql

取个名字叫mysql_db 密码123456 最后的mysql是告诉docker容器启动一个mysql的数据库。

3、可以通过 docker ps来查看运行的容器

还可以通过 docker inspect id来查看具体信息,ID可以不用输全,只要唯一即可。

4、下载WordPress镜像

docker pull wordpress

5、启动Wordpress

docker run --name wordpressTest --link mysql_db:mysql -p 8086:80 wordpress

ocker run --name wordpressTest --link mysql_db:mysql -p 8086:80 wordpress

给运行的WordPress取个名字叫wordpressTest 数据库link到mysql_db的mysql数据库,端口由默认的80转换到8086,wordpress

6、移除运行的容器,按名字移除

docker rm 名字

7、访问

我是通过虚拟机来进行访问,需要把虚拟机的防火墙进行设置,否则访问不到,我这里直接停止了防火墙服务
Redhat停止防火墙:service iptables stop
Ubuntu停止防火墙:ufw disable
如果启动成功,直接访问http://ip:端口/容器名字 即可访问,
第一次访问需要设置语言、设置登录用户名和密码,由于忘记了截图,请见谅
后面访问

好了,docker运行WordPress到此就搭建完毕。只需要运行docker命令既可,如果按照传统的搭建方式,需要按照各种软件和环境,还有可能每个环境不一样,出现各种奇葩问题,有了docker就不会出现这样的问题。
至于在Linux怎么按照docker,在这里提供ubuntu的按照命令,由于docker是诞生在ubuntu的环境下,建议学习就用ubuntu环境,我在这里就介绍一种自带的按照方式
sudo apt-get update
sudo apt-get install docker.io
这种安装方式需要时ubuntu14.04及以上版本,之前没有自带docker。
docker在Windows和Mac环境没有支持,但是提供了一个docker tool的安装方式,其实也是在Windows和Mac下虚拟了一个Linux环境,网上的建议是安装双系统,没有那个条件,建议还是用虚拟机吧。

wordpress如何更换域名、转移到本地?

wordpress是非常成功的开源博客系统,在使用过程中难免会碰到需要更换域名、将网站搬移到本地进行测试等情况的发生。那么,如何更换域名、如何转移到本地呢

未分类

wordpress是一个动态系统,更换转移其实很简单。基本思路其实就是将数据库的连接全部替换就行了。但是为了保险起见,下面提供包括备份的详细步骤

1、备份网站文件

如果是换域名,但是主机不变的话,这一步可以省略

2、备份数据库

这一步是为了以防万一。任何改动都备份一下比较好,以防止出错。

如果是更换了网站,或者转移到本地,这个时候则需要重新将网站安装好

3、替换数据库中的连接

选中该数据库之后,点击SQL,输入以下代码:

UPDATE wp_options SET option_value = replace(option_value, 'www.mydomain.com','www.newdomain.com') ;
UPDATE wp_posts SET post_content = replace(post_content, 'www.mydomain.com','www.newdomain.com') ;
UPDATE wp_comments SET comment_content = replace(comment_content, 'www.mydomain.com', 'www.newdomain.com') ;
UPDATE wp_comments SET comment_author_url = replace(comment_author_url, 'www.mydomain.com', 'www.newdomain.com') ;

以上代码中,www.mydomain.com 代表原来的域名,www.newdomain.com 代表新域名。

如果是搬运到本地,则新域名为 localhost。

如果有缓存插件,最后记得更新缓存。

WordPress定期出现“建立数据库连接时出错”问题的解决方案

先贴阿里云服务器的配置:

未分类

这是一个困扰我很久的问题,之前不管是搭在CentOS还是Ubuntu上,Wordpress都会定期出现“建立数据库连接时错误”,最近一周更是每天早上网站都无法访问。通过 netstat -tunlp 发现是MySQL的进程被干掉了,service mysqld restart 还重启不了,简单粗暴点就直接reboot。不过每天早上起床先reboot也不是个办法,而且我猜测网站频繁连不上会被搜索引擎降权,所以问题还是要解决的。百度“wordpress建立数据库连接时出错”,搜索结果可以归为以下几类:

  • 安装WordPress时出现这个问题,而我是运行时定期出现,没用。
    修改localhost为127.0.0.1,没用。

  • define(‘WP_ALLOW_REPAIR’, true); 让WordPress自行修复数据库,没用。

  • 修改 php.ini 文件里 mysql.default_socket、mysqli.default_socket、pdo_mysql.default_socket 的值为/tmp/mysql.sock,没用。

就在我快要放弃挣扎的时候,看到了 https://bbs.aliyun.com/read/269743.html 这篇文章,跟着作者的指引,问题竟然给解决了。总结一下:

起因

简单来说就是PHP-FPM子进程过多,吃光了内存,MySQL的进程就被干掉了。(实际上这个里面涉及到的知识点非常多,我目前还不具备完全搞清楚的知识储备,参考的那篇文章里也没有讲彻底。)

论证

百度“在线压力测试”,看到阿里云的广告,点之,免费试用性能测试铂金版。

未分类

未分类

未分类

其实并发调到6,7的时候就扛不住了。free -m 内存所剩无几;netstat -tunlp MySQL进程被kill;访问网站,出现“建立数据库连接时出错”,问题得到复现。

解决方案

编辑 php-fpm.conf 文件,控制PHP-FPM的子进程数。

操作步骤

1、找到php安装目录etc目录下的 php-fpm.conf 文件。

2、找到 pm 、pm.start_servers 、pm.min_spare_servers 、pm.max_spare_servers 这几项参数,修改参数的值。

pm = dynamic                        #php-fpm以动态模式运行,动态模式适合内存较小的服务器
pm.start_servers = 3                #动态模式下,php-fpm的起始进程数
pm.min_spare_servers = 3            #动态模式下,php-fpm的最小进程数
pm.max_spare_servers = 10           #动态模式下,php-fpm的最大进程数

3、service php-fpm restart 重启php-fpm

此时开启性能测试,发现MySQL的进程不会再被干掉,网站也不再出现“建立数据库连接时出错”的问题。收工。

三种方法解决升级更新 WordPress 速度慢的问题

如果你的 WordPress 搭建在国内服务器上,那你肯定遇到过 WordPress 更新失败的问题。我在阿里云上实测下载官方安装包速度不过每秒十几 k。那么除了官方繁琐的“三步”升级法(手动覆盖文件)外还有其他更高效的更新方法吗?

方法一:WP-CLI

WP-CLI 是官方推出的一款 WordPress 命令行工具。无需浏览器,你就可以实现快速安装、更新主题、配置站点、搜索替换等几乎所有可以想到的功能。

如何安装 WP-CLI 这里不做说明,请移步官方安装指南: https://make.wordpress.org/cli/handbook/installing/

假如你已经安装好了 WP-CLI,那么首先通过 wp core check-update 命令获取新版的安装包地址,然后通过自己的途径下载并放到服务器上。

$ wp core check-update
+---------+-------------+-----------------------------------------------------------------+
| version | update_type | package_url                                                     |
+---------+-------------+-----------------------------------------------------------------+
| 4.9     | major       | https://downloads.wordpress.org/release/zh_CN/wordpress-4.9.zip |
+---------+-------------+-----------------------------------------------------------------+

最后执行 wp core update path/to/zip/file 命令升级 WordPress,输出的内容和你通过网页升级类似。

$ wp core update path/to/zip/file
Starting update...
正在解压缩升级文件...
...
Cleaning up files...
No files found that need cleaned up.
Success: WordPress updated successfully.

安装过程中,可能会自动下载语言包,不过语言包很小,没什么影响。这样你就成功升级了 WordPress~

方法二:修改 WordPress 升级代码

或者我们可以修改 WordPress 升级代码逻辑,如果下载的文件是更新包,就直接指向本地文件,而不要远程下载。

编辑 /wp-admin/includes/class-wp-upgrader.php 文件,搜索 $download_file = download_url($package);,作以下修改:

public function download_package( $package ) {
    ...

    // 如果想知道原来的下载地址,可以取消注释下面这行,然后在网页后台点更新获得。
    // exit($package);

    if ($package == 'https://downloads.wordpress.org/release/zh_CN/wordpress-4.9.zip') {
        $download_file = 'path/to/zip/file';
    } else {
        $download_file = download_url($package);
    }

    ...
}

方法三:使用代理服务器

打开 wp-config.php 文件,在底部增加以下代码:

define('WP_PROXY_HOST', 'us.webres.wang');
define('WP_PROXY_PORT', '31281');

* 该示例代理服务器来源于网络。

Ubuntu下使用docker部署WordPress

上期docker使用教程

http://www.jianshu.com/p/46c7bed70f75

感觉中了docker的毒,简直神器,这次带来部署WordPress的教程

一、pull MySQL镜像

sudo docker pull mysql

二、运行MySQL

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql

三、pull WordPress镜像

sudo docker pull wordpress

四、运行WordPress

sudo docker run --name wordpress --link mysql:mysql -p 80:80 -d wordpress

五、浏览器访问

是不是很熟悉的界面

未分类

Centos7.4下用Docker-Compose部署WordPress

前言

最近在学习Docker相关知识,通过阅读第一本Docker书后,正想着手实战用一下这个技术,但又不太敢直接在项目环境下动手。考虑足足三秒钟之后决定买个阿里云ECS搭建一个属于自己的基于Docker的WordPress博客Daniel Fu’s hut传送门。

本博客搭建环境(阿里云ECS的购买与基本的安全组配置等工作在文中省略,各位看官可自行研究):

  • 阿里云ECS
  • Centos 7.4

部署工具

  • Docker
  • Docker Compose(Compose工具比起单纯的Dockerfile来更为便利、更易管理)
  • WordPress和MySql5.7(运行在Docker容器中)

现在逐个讲解下如何安装:

Docker:

根据官方文档,Docker分为Community Edition (CE)和Enterprise Edition (EE)两个版本,我们作为学习和个人使用,当然选择的是Community Edition (CE),安装步骤如下:

// 步骤1 - 为了确保没有安装过老的Docker版本,先将已经安装的Docker从宿主机上删除(如果是在使用中的正式服务器,请谨慎执行此步):
$ sudo yum remove docker 
  docker-common 
  docker-selinux 
  docker-engine

// 步骤2 - 安装Docker所需的包:
$ sudo yum install -y yum-utils 
  device-mapper-persistent-data 
  lvm2

// 步骤3 - 配置到稳定的Docker CE安装库:
$ sudo yum-config-manager 
    --add-repo 
    https://download.docker.com/linux/centos/docker-ce.repo

// 步骤4 - 安装Docker CE:
$ sudo yum install docker-ce

// 步骤5 - 启动Docker服务:
$ sudo systemctl start docker

// 步骤6 - 测试是否安装成功:
// 可以通过查看版本的形式确认安装是否成功:
$ docker --version 
// 也可以通过直接运行hello-world容器来确认安装是否成功:
$ docker run hello-world

Docker Compose:

为了便于使用,我们需要安装Docker Compose来管理和运行Docker容器,Docker Compose的安装步骤如下:

// 步骤1 - 下载安装文件:
$ sudo curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

// 步骤2 - 给已下载的安装文件添加执行权限:
$ sudo chmod +x /usr/local/bin/docker-compose

// 步骤3 - 测试是否安装成功:
$ docker-compose --version

部署WordPress和MySql容器:

先创建一个工作目录,并创建名为docker-compose.yml的文件:

$ cd /usr/
$ sudo mkdir myblog && cd myblog
$ sudo vim docker-compose.yml

将如下内容保存在docker-compose.yml文件中:

version: '3'
services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: your-mysql-root-password
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
        - wp_site:/var/www/html
     ports:
       - "80:80"
       - "443:443"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:
    wp_site:
  • 关于Composer所使用的的yml文件的语法,请参考官方文档,这里就不一一解释了(因为我自己也是刚入门,只会几个基本的用法)。

  • 和官方给的Demo不同,上述yml文件中,我在volumes中添加了wp_site的卷,并将其挂在到wordpress容器中,这样,当容器被停止或者删除后,重新安装并启动wordpress容器时,已安装的plugins也可以直接继续使用,而不是重新安装。

此时,我们直接使用docker-compose命令启动容器:

$ sudo docker-compose up -d

启动之后,我们就可以通过 http://ecs-ip (因为我们绑定的是宿主机的80端口) 来访问WordPress(如果不能访问,请查看阿里云安全组中,是否已经开启了你所指定端口的公网访问权限,一般80端口是默认开启的)。

如果需要关闭服务,则执行如下命令:

$ sudo docker-compose down

开启你的博客之旅:

我们的WordPress博客已经搭建完成,通过访问后台管理页面来初始化网站。然后找一个喜欢的主题,安装好必要的插件,我们就可以在一个属于自己的博客网站上写下自己的第一篇博客。

分享一下:这是我第一次用WordPress,还有很多东西需要慢慢摸索。目前我安装了Jetpack插件和WP Editor.MD插件,选用的主题是Sirius免费版。

遇到的挫折:

第一次安装时,当使用 sudo docker-compose up -d 命令启动容器后,提示容器启动正常,但是无法访问网站,此时通过sudo docker logs xxx_wordpress_1(xxx_wordpress_1以实际生产的容器名称为准)查看日志,看到日志中不断提示数据库无法连接的错误。花了好几个小时排查,总算找到问题所在,是因为以前在机器上写Docker相关的测试例子的时候,宿主机上设置了几个全局变量(如:ServerName、ServerHost、UserName等,可通过env命令查看当前系统环境变量),这些全局变量导致了wordpress容器无法连接到db容器。这个小插曲告诉我们,不要随便在宿主机上设置环境变量,如果必须设置,也应该做好命名和管理工作。

wordpress 固定链接设置后 出现404错误,不能访问文章的解决办法

如果你的Apache、PHP、Mysql系统架构是自己配置的,或使用的某些安装包,可能会有这个问题,本人曾经遇到过,用第五条解决,如下:

AllowOverride Not Enabled 

服务器可能没打开AllowOverride。如果httpd.config的AllowOverride设置的是None,那.htaccess将被忽略。正确的设置:

<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>

也需要在DocumentRoot打开AllowOverride:

<Directory /var/www/html>
# ... other directives...
AllowOverride All
</Directory>

固定链接的其它知识:

1. 首先介绍下,固定链接。

固定链接是你个人博客里的文章、分类以及其他页面的固定链接地址。如果博客的固定链接变化,会造成其他人通过之前的链接地址来浏览博客时出错,所以每篇博客的链接地址都应该固定,而且永久不改———这也是固定链接名字的由来。

固定链接的类型:目前共有三种基本的类型:

(1)默认:http://example.com/?p=N N是文章ID

(2)mod_rewrite: “漂亮的链接”
使用mod_rewrite或lighttpd可以生成更好看的链接地址(查看 漂亮的链接),有各种个样的链接格式,最常见、最通用的格式如下
http://example.com/category/post-name/
http://example.com/year/month/day/post-name

(3)PATHINFO: “比较好的链接”
PATHINFO类型的链接地址和mod_rewrite类型的地址看起来很像,唯一的区别是在前面多了/index.php,如下: http://example.com/index.php/yyyy/mm/dd/post-name/除此之外,和mod_rewrite类型的地址一样,也具有同样的可配置性。任何mod_rewrite链接地址可以做的事情,PATHINFO也可以。

2. 选择你的固定链接结构

在设置 → 固定链接,可以选择默认格式,也可以使用结构标签在自定义结构的输入框里输入你想要的格式。如果想激活PATHINFO类型的链接地址,只要将地址以index.php/开头。

确保以%post_id%或%postname%结尾(如/%year%/%monthnum%/%day%/%postname%/),以便每个地址对应唯一的一篇博客。

出于性能上的考量,不推荐以博客类型、博客标签、博客作者、博客标题作为固定链接地址的开头这些都是纯文本的属性(field),使用它们作为链接的开头,WordPress需要更多的时间区分文章(Post)地址和页面(Page)地址,而且为了区分还要在数据库里存储额外的信息,带来不必要的开销。推荐使用数字的属性(field)作为链接的开头,如年份或文章ID。

%year% 

文章发表的年份,四位数,如 2004

%monthnum% 

月份,如 05

%day% 

天,如 28

%hour% 

小时,如 15

%minute% 

分钟,如 43

%second% 

秒,如 33

%postname% 

文章标题的别名 (编辑文章/页面时的别名栏)。对于文章标题为 “This Is A Great Post!” 的%postname%是this-is-a-great-post(查看 仅仅使用 %postname%)。 出于性能原因,强烈不建议使用%postname%作为链接地址的开头。 *** 注 – 从WordPress 2.0开始这条建议可以无视了。

%post_id% 

文章的唯一ID,如 423

%category% 

分类的别名 (新建/编辑分类时的别名栏)。 有层级关系的类型在链接地址里就像有层级的目录。 出于性能原因,强烈不建议使用%category%作为链接地址的开头。

%tag% 

标签的别名(新建/编辑标签时的别名栏)。 出于性能原因,强烈不建议使用%tag%作为链接地址的开头。

%author% 

作者的别名。

3. 自定义固定链接的问题。

当创建或更新“漂亮”固定链接结构时,WordPress会生成新的重写规则并插入到.htaccess文件中。如果出错,WordPress会提示You should update your .htaccess now并且告诉你哪些重写规则需要拷贝和粘贴到.htaccess文件(粘贴到文件的末尾)。

WordPress不会删除.htaccess中任何已存在的重写规则或目录。如果有其他重写规则,把它们放到WordPress的重写规则的前面。

(1)我的.htaccess在哪里?

WordPress的index.php和.htaccess都在博客地址目录下,博客地址在设置,常规选项里可以查到。由于有个”.”在文件名中,FTP客户端可能看不到,除非你修改FTP客户端的设置,使其显示所有文件,包括隐藏文件。如果你是通过Godaddy Hosting Connection installation来安装WordPress的话,有些主机提供商(如Godaddy)不显示或不允许你修改.htaccess文件。

(2)创建和编辑(.htaccess)

如果还没有.htaccess文件,创建一个。如果能通过shell或ssh连上服务器,直接输入touch .htaccess就创建了。如果使用FTP上传文件,可以在本地创建文件,如1.htaccess,上传到WordPress的跟目录,然后重命名为.htaccess。

可以通过FTP,shell或主机提供商可能提供的控制面板来编辑.htaccess。

如果.htaccess有错而导致(“Internal Server Error (500)”),可以使用FTP或控制面板删除出错的.htaccess。

(3)自动更新 .htaccess

如果WordPress不能自动更新.htaccess,它会告诉你原因,如.htaccess文件可写,才会自动更新,但是目前不是可写的…,这个提示在设置→固定链接面板的底部。

想让WordPress自动更新,必须给WordPress开通.htaccess文件的写权限. 确切的权限依赖于你的服务器环境,尝试给文件拥有者打开写权限,然后作者所在组打开写权限,然后所有人,一步一步测试,一旦WordPress有了写权限,则不要再进一步放宽权限。

(4)不使用mod_rewrite的固定链接

漂亮的固定链接通常需要mod_rewrite,但是IIS(Windows servers)不支持mod_rewrite。(如果在Windows上使用Apache 2.0.54,mod_rewrite可以正常工作,需要在apacheconfhttpd.conf打开这个模块。)

如果使用IIS 7且有服务器的管理权限,可以使用Microsoft的URL Rewrite模块。虽然和mod_rewrite不是完全兼容,但是支持WordPress的“漂亮”链接。安装后打开WordPress文件夹下的web.config,添加下面的规则到 system.webServer节点。

4. 固定链接遇到的问题和解决

.htaccess一般性问题
对于WordPress没有生成.htaccess文件或不将新的重写规则写到已存在的.htaccess文件,原因各种各样,按照下面的步骤,一步一步,注意,当且仅当上一步无效后再继续下一步。

(1)修改权限: 使用chmod将 .htaccess的权限改为666,以便使用template editor编辑,但是不推荐这样做,因为这样的话其他有编辑模板权限的用户也能编辑.htaccess,可以将权限改为660。

(2)服务器阻止修改: 服务器有可能阻止了SERVER_SOFTWARE变量的设置,导致生成.htaccess失败。如果确定使用的是Apache,修改wp-includes/vars.php,跟着下面的步骤走。
详看:http://codex.wordpress.org/zh-cn:%E4%BD%BF%E7%94%A8%E5%9B%BA%E5%AE%9A%E9%93%BE%E6%8E%A5

5. 修复其他问题

如果正确生成.htaccess但固定链接还是有问题,到WordPress论坛How To版发帖子求助。

AllowOverride Not Enabled
服务器可能没打开AllowOverride。

如果httpd.config的AllowOverride设置的是None,那.htaccess将被忽略。正确的设置:

<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>

也需要在DocumentRoot打开AllowOverride:

<Directory /var/www/html>
# ... other directives...
AllowOverride All
</Directory>

对于使用Mac OS X服务器的,还要修改/etc/httpd/sites/中的AllowOverride。

如果不想设为all,参考Apache Core Features.
翻页有问题
有时候翻到第二页或其他页不能正常工作,地址如下:

http://www.example.com/page/2/
http://www.example.name/category/categoryname/page/2/
http://www.example/year/month/day/page/2/
http://www.example/year/month/page/2/

访问上面的任何一个链接,出现提示说: “Sorry, no posts match that criteria.”
这是.htaccess造成的,删掉,重新生成就好了。

如果还不行,到这里看看this support post.

6. 小贴士和小技巧

如果想在Google News上展示你的网站,你的链接地址至少以3个数字结尾,通过%postname%-%post_id%很容易做到,最后生成的URL如http://mysite.com/cooking-tips-tricks-344。

地址以.html结尾
使用结构标签很容易做到这一点,如
需要注意的是,这并不会生成静态的html文件,仅仅是用.html作为后缀,页面还是动态生成的。这是否会给SEO带来好处还无定论,但是当你想从WordPress搬家时,将带来很多便利,因为所有页面可以很容易地变成静态的,而且地址不用改变。

避免固定链接地址被解析成归档链接
也许有的人一天顶多发一篇博客,于是使用%year%%monthnum%%day%这样的固定链接,这样的链接会解析成这一天所有的文章,为了避免这个问题,最好使用%year%%monthnum%%day%%hour%。
检查固定链接结构
检查博客是否有固定链接结构,使用如下代码:

if ( get_option('permalink_structure') != '' ) { echo 'permalinks enabled' }