*PukiWiki別窓リンク [#e5d8d8bd]
-[[DigiLoog元記事>+http://nowsky.dip.jp/digiloog/2011/06/article_607/]]
*Linuxのルーティング [#mca940dd]
基本
~

PukiWikiの通常リンク方法では同窓リンク(『target="_blank"』オプション無し)となるが、それを別窓リンク(『target="_blank"』オプション有り)にも対応させる方法。
[[ココ>+http://pukiwiki.sourceforge.jp/dev/?BugTrack%2F730]]にも色々と書いてあるが、やる事が多いのと自分では解りにくかったので他の方法を模索。
下みたいな感じでリンクをページを書くと、リンクが出来る様にPHPファイルを一部修正する。
-リンク方法
*routeの恒久的な追加 [#o9df9a5e]
基本的には以下ファイルのパターンを使用して追加する
どのファイルも特殊な書式なので注意する事
 # vi /etc/sysconfig/static-routes
 # vi /etc/sysconfig/network-scripts/route-eth0
 # vi /etc/sysconfig/network-scripts/route-br0
~

 通常リンク方法 → [[ns-lab>http://nowsky.dip.jp/]]
 別窓リンク方法 → [[ns-lab>+http://nowsky.dip.jp/]]
-リンク見本
*routeの恒久的な削除 [#fbec960a]
[[追加の方法>#o9df9a5e]]はあるのに、削除の方法は調べた限りでは無かったのでスクリプトを改造する
使える場面としては2枚のNICを挿した鯖で、それらのNICに同一セグメントのIPアドレスを割り振る時には使えると思われる
なお、&font(b){Linuxのパッケージアップデート『yum update』をした際に該当スクリプトが初期化されるらしいので、その時は再度書き換えるか、後述する専用スクリプトを使用する};
~

LEFT:
|962|c
|通常リンク方法 → [[ns-lab>http://nowsky.dip.jp/]]&br;別窓リンク方法 → [[ns-lab>+http://nowsky.dip.jp/]]|
-&size(16){&font(b){1. スクリプト修正};};
ネットワークをリスタートした際にも正常に動作する様にスクリプトを修正
 # vi /etc/init.d/network
 _/_/_/_/_/
 -# Add non interface-specific static-routes.
 -if [ -f /etc/sysconfig/static-routes ]; then
 -    grep "^any" /etc/sysconfig/static-routes | while read ignore args ; do
 -        /sbin/route add -$args
 -    done
 -fi
 _/_/_/_/_/
 +# Add and Del interface-specific static-routes.
 +if [ -f /etc/sysconfig/static-routes ]; then
 +    grep "^any" /etc/sysconfig/static-routes | while read ignore args ; do
 +        /sbin/route add -$args
 +    done
 +    grep "^del" /etc/sysconfig/static-routes | while read ignore args ; do
 +        /sbin/route del -$args
 +    done
 +fi
~
*編集ファイル [#nbfc1fcc]
編集するファイルは、''『[PukiWiki]/lib/make_link.php』''ファイル。
基本的には以下に書いてある方法で出来るが、PukiWikiのバージョンによっては書き換える内容を変更する必要がある。...かも?

-&size(16){&font(b){2. 削除するスタティックルートのデータ};};
スタティックルートを追加する時に使用するファイルと兼用しているので、接頭語を追加して判別する
 # vi /etc/sysconfig/static-routes
 _/_/_/_/_/
 ※192.168.1.0/24でインターフェースがbr0のルーティングを削除する時
 del net 192.168.1.0 netmask 255.255.255.0 br0
 ※link-locak(169.254.0.0)でインターフェースがbr0のルーティングを削除する時
 del net link-local netmask 255.255.0.0 br0
~
*編集箇所 [#u6d3fa2c]
&size(16){&font(b){1. [class Link_url extends Link()] - [function get_pattern()]};};

-書き換え前
 function get_pattern()
 {
     $s1 = $this->start + 1;
     return <<<EOD
 (\[\[             # (1) open bracket
  ((?:(?!\]\]).)+) # (2) alias
  (?:>|:)
 )?
 (                 # (3) url
  (?:(?:https?|ftp|news):\/\/|mailto:)[\w\/\@\$()!?&%#:;.,~'=*+-]+
 )
  (?($s1)\]\])      # close bracket
  EOD;
     }
-&size(16){&font(b){3. 削除専用スクリプトの作成};};
/etc/init.d/networkが書き換えられた場合の応急処置スクリプトを作成
 # vi ~/static-routes_del.sh
 _/_/_/_/_/
 #!/bin/bash
 PATH=/bin:/sbin:/usr/bin
 
 # Delete interface-specific static-routes.                                                                           
 if [ -f /etc/sysconfig/static-routes ]; then
     grep "^del" /etc/sysconfig/static-routes | while read ignore args ; do
     /sbin/route del -$args
     done
 fi
 _/_/_/_/_/
 # chmod 700 ~/static-routes_del.sh
 # chown root.root ~/static-routes_del.sh

-書き換え後
 function get_pattern()
 {
     $s1 = $this->start + 1;
     return <<<EOD
 (\[\[             # (1) open bracket
  ((?:(?!\]\]).)+) # (2) alias
  (?:>|:)
 )?
 (                 # (3) url
  (?:(?:\+?https?|\+?ftp|\+?news):\/\/|mailto:)[\w\/\@\$()!?&%#:;.,~'=*+-]+
 )
 (?($s1)\]\])      # close bracket
 EOD;
     }

----

&size(16){&font(b){2. [class Link_url extends Link()] - [function toString()]};};

-書き換え前
 function toString()
 {
     if (FALSE) {
         $rel = '';
     } else {
         $rel = ' rel="nofollow"';
     }
     return '<a href="' . $this->name . '"' . $rel . '>' . $this->alias . '</a>';
 }

-書き換え後
 function toString()
 {
     if (FALSE) {
         $rel = '';
     } else {
         $rel = ' rel="nofollow"';
     }
     if (ereg("^(\+)(.*)", $this->name, $regs)) {
         return '<a href="' . $regs[2] . '" target="_blank" ' . $rel . '>' . $this->alias . '</a>';
     }else{
         return '<a href="' . $this->name . '"' . $rel . '>' . $this->alias . '</a>';
     }
 }
~
*Fix [#sff9d130]
そうすると、[[URLの先頭に+をつけるリンクを作成する>#xa2bcafc]]事によって、別窓リンクが可能になる。
また、今回の改良はその他文字装飾系プラグインと同時使用する事も可能。