第一次写Apache2的RewriteRule(用于域名泛解析)

在研究了正则表达式和apache的rewrite模块之后,写了第一个rewriterule,实现的功能是:
将所有的对:
name1.name2.dom.com/someResource
的访问都定向到服务器目录:
/server/name2/name1/someResource
其中name1和someResource是可变部分。对于name1,相当于实现了三级域名的泛解析。

那么在VirtualHost块下是这么写的:
//打开重写模块,这个的好处在于不需要重写的的时候,只把on改成off就让下面的代码全部失效了,不用一句一句注释
RewriteEngine on
//判断继续下一步的条件是请求的url的服务器部分(http://之后到第一个/之前,变量名是%{HTTP_HOST})
//是不是长得像name1.name2.dom.com

RewriteCond %{HTTP_HOST} ^[^.]+.name2.dom.com$
//重写访问的地址,将"/someResource"改为:"name1.name2.dom.com/someResource"
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
//再重写一次,将"name1.name2.dom.com/someResource",改写为"/server/name2/name1/someResource"
//其中每个()匹配的字符串都可以用$1这样的变量名来引用,()的定义是从左到右编号的(从1开始)
//第一个()是:([^.]+),在这里匹配的是"name1"字符串,也就相当于$1="name1"
//第二个()是:(.),在这里匹配的是"/someSource",也就相当于$2="/someSource"
//所以重写的结果"/server/name2/$1$2"翻译出来就是"/server/name2/name1/someSource"。也就是我们的目标地址

RewriteRule ^([^.]+).name2.dom.com(.
) /server/name2/$1$2

正则表达式

想学正则表达式很久了,今天终于看了看。因为在apache中的rewrite中需要用正则表达式去匹配url。
后面链接的一篇文章讲得很详细了,就不复制粘贴了,以后有学习心得之类的再补充在此。

一篇好文章可以看看:
http://manual.phpv.net/regular_expression.htmlX34X
另外一个来自百度百科的条目,其中有正则表达式各个字符的含义
正则表达式字符含义在此

在objective-c中使用的方式如下:(这个例子检测文本text中的url)

  1.     NSString *text = [info objectForKey:@“text”];
  2.     NSString *urlDetected = nil;
  3.     {//url detection
  4.         //if there is a link of this feed, such as video share, the text is like:@”sometexthttp://somelocation”. And the url link is only contained in this text.
  5.         NSRegularExpression *regExp = [NSRegularExpression regularExpressionWithPattern:@“(http|https|ftp)\\://([a-zA-Z0-9\\.\\-]+(\\:[a-zA-Z0-9\\.>amp;%\\$\\-]+)*@)?((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\\-]+\\.)*[a-zA-Z0-9\\-]+\\.[a-zA-Z]{2,4})(\\:[0-9]+)?(/[^/][a-zA-Z0-9\\.\\,\\?\\’\\\\/\\+>amp;%\\$#\\=~_\\-@]*)*” options:NSRegularExpressionCaseInsensitive error:nil];
  6.         NSRange matchedUrlRange = [regExp rangeOfFirstMatchInString:text options:0 range:NSMakeRange(0, text.length)];
  7.         if (matchedUrlRange.location != NSNotFound) {
  8.             urlDetected = [text substringWithRange:matchedUrlRange];
  9.         }
  10.     }

wordpress开启多站点支持

wordpress 3.0 开始就支持多站点了,不过默认是关闭的。
开启的方式也很简单,那就是在 wp-config.php文件最后添加一句

define('WP_ALLOW_MULTISITE', true);

之后就能在”工具(tools)”里面多出来一项”设置网络(networks)”,照着一步一步做就ok了。

如果采用子域名的方式,需要开启apache的rewrite。

对于apache1,开启方式是反注释掉httpd.conf中对应的语句。有一句
#Load什么什么rewrite什么的
去掉前面的#就可以了

对于apache2,执行
sudo a2enmod rewrite
就可以了

WordPress更新插件需要FTP权限的问题

WordPress在发现其所在目录的所有者和进程所有者不一致时会跳转到一个页面让填写ftp信息。解决办法如下:

运行
ps -aux
查看httpd进程或者apache2进程的用户名,比如我看见是www-data

切换到Wordpress的安装路径,比如wordpress安装在位置/www/wordpress ,就切换到/www目录,执行:
chown -R www-data:www-data wordpress

然后就OK了。