在iXWebHosting上安装WordPress遇到的问题,及解决方案
最近在iXWebHosting的虚拟主机上安装WordPress,遇到两个问题。这里跟大家分享一下解决方法。
只能安装到子目录的问题
使用iXWebHosting提供的cPanel后台的EasyApps Collection直接安装应用程序WordPress的时候,安装位置必须输入一个目录名,也就是说,WordPress必须安装到一个网站的某个目录中,而我是想直接安装到该网站的根目录下。
只能折衷一下:随便输入一个目录,如输入/wordpress,然后一步一步安装完成。
这时候使用http://domain/wordpress登录安装好的WordPress,进入Generate Setting,把博客地址改成直接的根目录地址:http://domain/。
保存,OK,现在不能访问了(因为根目录下根本没有/wp-admin/)。
现在进入cPanel的File Manager,全选/domain/wordpress下的所有文件,Move到/domain/中,确定,等待进度完成。
再回到刚才无法访问的页面,OK,完成!
中文乱码
安装好WordPress以后,发现在文章中输入的中文字符,一保存就都变成了问号。
查了若干资料,找到一份iXWebHosting提供的官方资料,是MySQL默认编码的问题,MySQL新建数据库的时候,没有指定编码,因此使用了默认的latin1(冰岛语)编码。官方给出的建议是登录cPanel后台的PHPAdmin,手动逐一讲所有编码应用为latin1的表和字段修改成utf8_unicode_ci。
曾经尝试修改过一次,问题确实解决了,但是,表和字段,一共有六十几个地方需要修改。真的很繁琐。再次提供一份SQL语句,从PHPAdmin中可以直接运行SQL进行修改全部。不过这是针对WordPress 2.9的数据库。不知道其他版本或者以后的新版本数据库结构是否会发生改变。
alter table `wp_posts` default character set utf8 collate utf8_unicode_ci;
alter table `wp_posts` change `post_content` `post_content` longtext character set utf8 collate utf8_unicode_ci not null,
change `post_title` `post_title` text character set utf8 collate utf8_unicode_ci not null,
change `post_excerpt` `post_excerpt` text character set utf8 collate utf8_unicode_ci not null,
change `post_status` `post_status` varchar( 20 ) character set utf8 collate utf8_unicode_ci not null default 'publish',
change `comment_status` `comment_status` varchar( 20 ) character set utf8 collate utf8_unicode_ci not null default 'open',
change `ping_status` `ping_status` varchar( 20 ) character set utf8 collate utf8_unicode_ci not null default 'open',
change `post_password` `post_password` varchar( 20 ) character set utf8 collate utf8_unicode_ci not null,
change `post_name` `post_name` varchar( 200 ) character set utf8 collate utf8_unicode_ci not null,
change `to_ping` `to_ping` text character set utf8 collate utf8_unicode_ci not null,
change `pinged` `pinged` text character set utf8 collate utf8_unicode_ci not null,
change `post_content_filtered` `post_content_filtered` text character set utf8 collate utf8_unicode_ci not null,
change `guid` `guid` varchar( 255 ) character set utf8 collate utf8_unicode_ci not null,
change `post_type` `post_type` varchar( 20 ) character set utf8 collate utf8_unicode_ci not null default 'post',
change `post_mime_type` `post_mime_type` varchar( 100 ) character set utf8 collate utf8_unicode_ci not null;
alter table `wp_comments` default character set utf8 collate utf8_unicode_ci;
alter table `wp_comments`
change `comment_author` `comment_author` tinytext character set utf8 collate utf8_unicode_ci not null,
change `comment_author_email` `comment_author_email` varchar(100) character set utf8 collate utf8_unicode_ci not null,
change `comment_author_url` `comment_author_url` varchar(200) character set utf8 collate utf8_unicode_ci not null,
change `comment_author_ip` `comment_author_ip` varchar(100) character set utf8 collate utf8_unicode_ci not null,
change `comment_content` `comment_content` text character set utf8 collate utf8_unicode_ci not null,
change `comment_approved` `comment_approved` varchar(20) character set utf8 collate utf8_unicode_ci not null default '1',
change `comment_agent` `comment_agent` varchar(255) character set utf8 collate utf8_unicode_ci not null,
change `comment_type` `comment_type` varchar(20) character set utf8 collate utf8_unicode_ci not null;
alter table `wp_links` default character set utf8 collate utf8_unicode_ci;
alter table `wp_links` change `link_url` `link_url` varchar(255) character set utf8 collate utf8_unicode_ci not null,
change `link_name` `link_name` varchar(255) character set utf8 collate utf8_unicode_ci not null,
change `link_image` `link_image` varchar(255) character set utf8 collate utf8_unicode_ci not null,
change `link_target` `link_target` varchar(25) character set utf8 collate utf8_unicode_ci not null,
change `link_description` `link_description` varchar(255) character set utf8 collate utf8_unicode_ci not null,
change `link_visible` `link_visible` varchar(20) character set utf8 collate utf8_unicode_ci not null default 'y',
change `link_rel` `link_rel` varchar(255) character set utf8 collate utf8_unicode_ci not null,
change `link_notes` `link_notes` mediumtext character set utf8 collate utf8_unicode_ci not null,
change `link_rss` `link_rss` varchar(255) character set utf8 collate utf8_unicode_ci not null;
alter table `wp_options` default character set utf8 collate utf8_unicode_ci;
alter table `wp_options` change `option_name` `option_name` varchar(64) character set utf8 collate utf8_unicode_ci not null,
change `option_value` `option_value` longtext character set utf8 collate utf8_unicode_ci not null,
change `autoload` `autoload` varchar(20) character set utf8 collate utf8_unicode_ci not null default 'yes';
alter table `wp_postmeta` default character set utf8 collate utf8_unicode_ci;
alter table `wp_postmeta` change `meta_key` `meta_key` varchar(255) character set utf8 collate utf8_unicode_ci null default null,
change `meta_value` `meta_value` longtext character set utf8 collate utf8_unicode_ci null default null;
alter table `wp_terms` default character set utf8 collate utf8_unicode_ci;
alter table `wp_terms` change `name` `name` varchar(200) character set utf8 collate utf8_unicode_ci not null,
change `slug` `slug` varchar(200) character set utf8 collate utf8_unicode_ci not null;
alter table `wp_term_relationships` default character set utf8 collate utf8_unicode_ci;
alter table `wp_term_taxonomy` default character set utf8 collate utf8_unicode_ci;
alter table `wp_term_taxonomy` change `taxonomy` `taxonomy` varchar(32) character set utf8 collate utf8_unicode_ci not null,
change `description` `description` longtext character set utf8 collate utf8_unicode_ci not null;
alter table `wp_usermeta` default character set utf8 collate utf8_unicode_ci;
alter table `wp_usermeta` change `meta_key` `meta_key` varchar(255) character set utf8 collate utf8_unicode_ci null default null,
change `meta_value` `meta_value` longtext character set utf8 collate utf8_unicode_ci null default null;
alter table `wp_users` default character set utf8 collate utf8_unicode_ci;
alter table `wp_users` change `user_login` `user_login` varchar(60) character set utf8 collate utf8_unicode_ci not null,
change `user_pass` `user_pass` varchar(64) character set utf8 collate utf8_unicode_ci not null,
change `user_nicename` `user_nicename` varchar(50) character set utf8 collate utf8_unicode_ci not null,
change `user_email` `user_email` varchar(100) character set utf8 collate utf8_unicode_ci not null,
change `user_url` `user_url` varchar(100) character set utf8 collate utf8_unicode_ci not null,
change `user_activation_key` `user_activation_key` varchar(60) character set utf8 collate utf8_unicode_ci not null,
change `display_name` `display_name` varchar(250) character set utf8 collate utf8_unicode_ci not null;
我对MySQL的语法不太懂,所以使用了这样的笨方法,应该有办法可以进行表和字段的遍历,然后替换这样子的。希望有熟悉MySQL的高手分享一份更好的SQL代码。
重写URL的问题
iXWebHosting没有提供URLRewrite的组件,而我刚好使用的是Windows主机。所以在自定义WordPress的URL的时候遇到了问题。
从网上找到一个404.php的东西,可以用IIS的404错误来解决这个URL重写的问题。
把404.php上传到博客根目录,然后设置cPanel中网站的Error,添加一个404的错误页,设置为URL模式,输入/404.php。
OK,现在使用/archive/234 这样的URL就可以直接访问文章页了。
这里还有另外一个小插曲
刚好我有另外一个博客,是需要安装在子目录中的(/blog/),本来是只需要把404设置成/blog/404.php就可以的。
但是这个网站的主程序是ASP.NET的,并且使用了/404.ashx来对文章系统进行URL重写。冲突了。
这里给出cPanel的一个解决方案:
点击进入对应站点的Web Service的设置页面,有一个"Web Directories Setting" 的项目,对的,点击Edit图标进入。
这是一个类似于设置虚拟目录的地方,只是有两个名字,一个叫Web Directory, 一个叫Application Directory,我不太懂什么意思。
这里Add一个Web Directory,"Web Directory Name" 设置成blog,而"Web directory path relative to the user home"要设置成博客的安装地址,输入"domain\blog", domain是你的网站文件夹的名字,需要特别注意的是,这里一定输入的是反斜杠,而不是斜杠。我就是在这里输入多次斜杠却不允许提交,才困惑这一栏到底什么意思。
然后把后面的Web Application由off设置成on。
再返回Web Service的设置页面,这时候在"Web Directories Setting"下面多了一个Select的选择项,选择刚才添加的Web Directory - blog,点击Go进入。
注意,下图是点击Go了之后,对Web Directory -blog 进行设置的页面,这里就可以针对/blog这个虚拟目录设置它的404错误了,Add一个404错误,设置为URL, /blog/404.php。
设置好以后,再从Select下拉列表中选择 Web Application - blog进行设置:
这里只需要把PHP从off设置为on。其他的ASPNET和SSI试自己的需要选择打开或关闭。
OK, 到此设置全部结束,可以登录去设置你的博客了。