标簽/Tag為[htaccess]的文章

[SiteLog]JQ AJAX 跨子域Post再總結 ,

為了配合 CDN 前台。 後台的域名改成了 mt./cgi-bin。 之所以啟用子域而不是獨立域名,是因為同域不同子域間可以天然共享 cookie ,而MT的POST必須帶有 cookie ,不然登錄信息驗證不過。

測試一下正常的POST,沒有任何問題。cookie 由于 CookieDomain 為 . ,所以cookie信息正常傳遞給了 mt. 後台。

但是接下來用 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 ""
</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個域名,但是這些個域名隻能指定同一個網站,也就是限制建多網站。 我的幾個域名如下: 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 .

随着文章的增多, 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-XXXXX.html,要讓變成 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 的朋友都不會感覺到變化。在網頁上顯示的訂閱依然是 /blog/rss.xml ,也就是關心小站的朋友不需要改變地址

但是實際上的變化還是有的,我修改了 .htaccess ,加入了如下幾行:


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

原因見這裡 :[随筆]閑話 Blog 訂閱,http://feed. 的 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

無意中在浏覽器中輸入 /cgi-bin/ ,居然發現出現了List界面,因為我的cgi-bin目錄裡面并沒有默認的index頁面,Apache智能的以list方式列出了所有的子目錄和文件。
這個對于website可不是什麼好事情,除非你做下載網站。

原因很簡單,服務商默認對目錄開啟了 Options Indexes 屬性。
解決辦法也很簡單。
在本website的根目錄下建立一個.htaccess 文件
内容隻有一句

Options -Indexes

這樣就關閉了整個網站的Indexes (lsit)功能。呵呵。當然也可以在子目錄裡面設置,範圍就比較小了。
同理,我也可以在這個文件裡面随便定置其他的權限或者CGI執行開關。
PS:我就喜歡Apache的靈活性。

--EOF--