标签/Tag为[htaccess]的文章

[SiteLog]JQ AJAX 跨子域Post再总结 ,

为了配合 CDN 前台。 后台的域名改成了 mt.easun.org/cgi-bin。 之所以启用子域而不是独立域名,是因为同域不同子域间可以天然共享 cookie ,而MT的POST必须带有 cookie ,不然登录信息验证不过。

测试一下正常的POST,没有任何问题。cookie 由于 CookieDomain 为 .easun.org ,所以cookie信息正常传递给了 mt.easun.org 后台。

但是接下来用 JQ $.post 进行 AJAX POST 的时候,就出现跨域问题了。 如果是Get,很简单,可以参考我上篇( [JQ+Perl]JQ AJAX跨域请求HTML/JS页面内容总结 )解决之。 POST 就必须设置跨域请求了。

不想回归 iframe 。幸好服务器部分配置可以自己控制。在后台脚本目录建立 .htaccess,内容如下:

code<IfModule mod_headers.c>
Header set Access-Control-Allow-Credentials: true
Header set Access-Control-Allow-Origin "http://easun.org"
</IfModule>

这下应该可以 $.post 了吧?

但是结果依然很悲哀,这次 POST 成功, 但是 JQ 并不传递 Cookie。导致身份认证出错。 Google之。发现跨域(包括子域), 如果要传递Cookie, JQ AJAX 还需要手动发送认证凭证,设置 withCredentials ,这样才会传递 Cookie.

根据这些信息。 重写 $.post$.ajax 模式,代码如下:

code$.ajax({
type: 'POST',
cache:false,
url: url,
data: $("#comments-form").serialize(),
success: function(data){
if (f.preview.value =='1' ) { EasunisPreReturn(data);}
else {EasunisPostReturn(JSON.parse(data));}
},
xhrFields: { withCredentials: true },
});
return false;

调试之,一切OK。

参考资料:

1.【前端笔记】使用ajax跨域withCredentials的作用

后记:

对于IE8,9 来说。JQ AJAX 跨子域Post 即使设置了上述也会失败。原因很奇葩,跨域提交需要使用 XDomainRequest 对象。

幸好有 JQ 插件 jQuery-ajaxTransport-XDomainRequest 可以解决。 在 $.ajax 前引入:

code<!--[if lte IE 9]>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js"></script>
<![endif]-->

同时,为了兼容出错信息,当$.ajax 失败的时候,设定正常方式POST。虽然这样界面乱了,但是保证功能正常。

codeerror: function(){ f.submit(); }

--EOF--

GoDaddy 经济型(Economy)主机 使用简单感受

本站于 2015年3月正式入驻 GoDaddy 经济型(Economy)主机, Baidu上找了优惠码,12美元一年。

使用几天,还算稳定。 特共享如下:

Economy 限制建议一个网站,不限带宽,RAM 512M, 100G的空间,可以建10个MySQL数据库,支持100个邮箱地址。

简单的说说限制: 虽然 Economy 可以绑定N个域名,但是这些个域名只能指定同一个网站,也就是限制建多网站。 我的几个域名如下: easun.org easunlee.org easunstudio.com 统统指向同一个网站。 想要建立多网站的慎重使用。 (貌似可以通过自定义 .htaccess 来曲线完成。但是没有测试 )

主机访问速度还行。 后台可以自动安装 WordPress(博客) Joomla(门户) Drupal(CMS) phpBB(论坛),十分的方便(可惜没有 Movable Type)。

MySQL 可以通过 CPanel 和 phpMyAdmin 管理,也很方便。 另外。 支持 ssh。

--EOF--

[SiteLog]MT归档页面变更以及Tags搜索页面cache机制的变更 ,

This is a SiteLog for Easun.org.

随着文章的增多, Movable Type归档页和按照分类归档页是越来越没有意义了。抽点时间干脆彻底改写模板(Template)而重构页面显示。
改写的结果是 归档页 全部显示所有日志的标题和回复数目。照分类归档页 不在显示最近的几篇文章的概要而也是显示该分类下的所有所有日志的标题和回复数目。
具体样式可以参考 归档页分类 [MT相关] 的文章归档 来看看效果。
Movable Type的静态发布,成也萧何,败也萧何啊。

另外,就是对本站的 Tags 搜索进行了全部重构。 Movable Type 程序的负荷一直在与 mt-search.cgi 。 早在08年底,由于 mt-search.cgi 的效率问题 ,就直接禁止了通过mt-search.cgi来用关键字搜索本站,而改成了 Google Custom Search 。 Tags 搜索也自己写了 Perl 脚本来文本cache mt-search.cgi返回的结果。
但是,最近发现,当初的文本cache机制大有问题。主要表现在下:

  1.  不能自动更新 cache。导致部分cache返回结果的还是2009年初。
  2. 对于返回数据大于一页的Tags搜索页面仅仅是显示第一页。不能翻页。


改写后这些问题都解决了。
主要流程是:
点击 tag 后, 检测是否存在 cache后生成的 html 文件? 如果有并且文件是2天内的,则直接输出现成的 html文本;如果没有或者过期,则交给mt-search.cgi并且同时生成新的cache文本。分页的 tag 返回页面,用 tag/page 来表示分页。彻底静态化。
同理,后台搜索的 Search Results 模板(Template)做了大量的细致修改,以满足搜索返回的要求。
至于静态化,是通过.htaccess 进行重定位。代码如下:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !.html
RewriteCond %{REQUEST_URI} !(.*)/$
#RewriteCond %{REQUEST_FILENAME}.html !-f
RewriteRule ^(.*)$ /cgi-bin/mtos/tags_do.cgi/$1 [L]


具体演示参见以下链接:

另: Movable Type 已经 5.12 了。 升级还是不升级。这比较纠结。。。。

--EOF--

[Wiki设置]MediaWiki伪静态化的办法

伪静态化,好象是个说的很多的话题,就本站来讲, LB 的伪静态化,MT tag的伪静态化,MT search 的伪静态化等等。 一个目标就是 SEO 吧:) 另外一个目标就是“用户友好”。这些大多数都是通过 ".htaccess" 来完成的。MediaWiki 也不例外。

MediaWiki 的默认联结是 index.php?title=XXXXX,要让变成 show/XXXXX样式,用.htaccess设置起来很简单:
在 .htaccess 中添加以下规则


RewriteEngine on
RewriteRule show/(.+) /pathtoWiki/index.php?title=$1

然后修改LocalSettings.php 中 $wgArticlePath 的值

$wgArticlePath = "$wgScriptPath/show/$1";

这样就大功告成。

但是,这样似乎并不是效率最高的。
效率最高的办法是不用地址重写:
1.改名字:


mv index.php show
mv redirect.php redirect

2.修改.htaccess 规则


<Files ~ (show|redirect)>
ForceType application/x-httpd-php
</Files>
DirectoryIndex show

3.修改修改LocalSettings.php 中 $wgScript,$wgRedirectScript,$wgArticlePath 的值

$wgScript = "$wgScriptPath/show";
$wgRedirectScript = "$wgScriptPath/redirect";
$wgArticlePath = "$wgScript/$1";

因为没有使用 mod_rewrite ,网站的负荷下降,效率当然提升了:)

PS: 我作这个的原因因为 PerlChina Wiki Site, 演示在本地的测试Wiki

--EOF--

[SiteLog]正式启用FeedSky 烧录的 Feed

This is a SiteLog of Easun's WebBlog.
其实仅仅是记录下而已,对于来访的朋友,订阅本站 RSS Feed 的朋友都不会感觉到变化。在网页上显示的订阅依然是 http://easun.org/blog/rss.xml ,也就是关心小站的朋友不需要改变地址

但是实际上的变化还是有的,我修改了 .htaccess ,加入了如下几行:


Redirect /index.xml http://feed.easun.org
Redirect /blog/rss.xml http://feed.easun.org

原因见这里 :[随笔]闲话 Blog 订阅,http://feed.easun.org 的 CNAME 指向了 Feedsky 的烧录地址:)

--EOF--

升级到MT3.34和FastCGI的开启 ,

Movable Type 3.34出来好几天了吧?终于决定给自己的WebBlog升级了。
升级的热点是近来SPAM猖狂和新版本对FastCGI的支援。而我的WebBlog是在DreamHost上,刚好支援FastCGI

升级很容易,简单覆盖,看的出来,似乎 Six Apart 这次只是修改了 Bootstrap.pm 让它支援FastCGI而已,其他的修改基本上忽略不计。

说实在的,对于 FastCGI 技术我并不看好,觉得其不稳定性太高,程序写的稍有不好就会使apache崩溃,相对来说,我青睐于mod_perl,这个稳定点,性能也好点,MT程序标准的OOP编写方式在mod_perl跑的很稳定的,但是似乎支援mod_perl的空间除了自己作主机商外几乎是不可能的:)

[SiteLog]给Webiste自定义404,403错误页和设置MT的tag标签伪静态化(Rewrite) ,

This is a SiteLog for Easun's Blog。

纯粹的流水帐。几乎全是对服务器的设置和少量的对 MT 模板的修改。
Apache 服务器的好处又显示出来了,呵呵。
由于自己没有整个服务器的权限。所以改动都基于 .htaccess 文件

[sitelog]大疏忽,Website的目录居然可以List

无意中在浏览器中输入 http://easun.org/cgi-bin/ ,居然发现出现了List界面,因为我的cgi-bin目录里面并没有默认的index页面,Apache智能的以list方式列出了所有的子目录和文件。
这个对于website可不是什么好事情,除非你做下载网站。

原因很简单,服务商默认对目录开启了 Options Indexes 属性。
解决办法也很简单。
在本website的根目录下建立一个.htaccess 文件
内容只有一句

Options -Indexes

这样就关闭了整个网站的Indexes (lsit)功能。呵呵。当然也可以在子目录里面设置,范围就比较小了。
同理,我也可以在这个文件里面随便定置其他的权限或者CGI执行开关。
PS:我就喜欢Apache的灵活性。

--EOF--