FancyURLよりも簡単? URLをカスタマイズするプラグイン!
General Plugin info | |
---|---|
作者: | shizuki+nekonosippo+Cacher+Reine+yama |
最新のバージョン: | 0.3.8FIX1(2016/01/16) |
入手先: | https://github.com/NucleusCMS/NP_CustomURL/archive/master.zip 52.6KB |
ソース: | https://github.com/NucleusCMS/NP_CustomURL/blob/master/NP_CustomURL.php |
動作サンプル: | http://shizuki.kinezumi.net/ |
フォーラム参照先: | http://japan.nucleuscms.org/bb/viewtopic.php?t=2236 |
セキュリティチェック: | 未 |
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?virtualpath=$1 [L,QSA]
<? $CONF = array(); $CONF['Self'] = ''; include('./config.php'); selector(); ?>
ユーザーの方から情報をいただきました CPI のサーバで NP_CustomURL を利用する場合、.htaccess の RewriteEngine on の前に
Options +FollowSymLinks
を追加しないと 403 エラーになるそうです ブロゲ様、情報ありがとうございました
各ブログ・カテゴリ・アイテム等の URL をカスタマイズし、通常サイトと同じ様なディレクトリ階層の URL を提供します
各 URL のカスタマイズはプラグインの管理画面、または各ブログ・カテゴリ・アイテムの設定画面で変更します
NP_MultipleCategories のサブカテゴリに対応しています(無限階層対応)
ブログ、アイテム、カテゴリ、メンバーの各個別の仮想ディレクトリ・ファイル名は、それぞれの編集画面、及びプラグインの管理画面(インストールしたままの状態だと左端の『クイックリンク』に管理画面へのリンクが表示されます)から変更する事が出来ます サブカテゴリの仮想ディレクトリ名は、プラグインの管理画面からのみの変更になります
ブログ仮想ディレクトリ以外のデフォルトはオプションの編集画面で変更できます
RSS、ATOM へのリンクは、通常通り
<%sitevar(url)%>xml-rss2.php?blogid=n
と書く事も出来ますが(このときは blogsetting ではなく、必ず sitevar を使用してください)、固定ファイルの様に
<%blogsetting(url)%>rss2.xml
と書く事も出来ます(こちらは blogsetting でも sitevar でもどちらでも可)
上の対応に添って記述するようにしてください
<%CustomURL(i/12/i, LinkTest, LinkTitle)%>
全てのパラメータが省略された場合は、カレントのブログの URL が出力されます
<%CustomURL(trackback)%>
NP_TrackBack 用のトラックバック URL を出力します
標準では
http://example.com/trackback/item_123.html
になります\\
<%CustomURL(trackback,ext)%>
と書くと
http://example.com/item_123.trackback
に変更する事が出来ます
<%CustomURL(i/12/i, LinkTest, LinkTitle)%>
全てのパラメータが省略された場合は、カレントのアイテムの URL が出力されます
見た目だけでなく、検索エンジンへのURL多重登録を防ぐ効果もあります。
<%categorylink%><%CustomURL(path)%>
URL多重登録防止については後述の「URLの多重登録を防ぐ」もご覧ください。
拡張子の変更はなしです あくまでもファイル名のみです(拡張子は .xml でお願いします) NP_CustomURL.php の1406行目からが、contentType ヘッダの送出部分になります ここの
case 'rss1.xml': case 'index.rdf': case 'rss2.xml': case 'atom.xml':
の部分に変更したいファイル名を書き換えます 次にその下の
switch (end($path_arr)) { case 'rss1.xml': case 'index.rdf': $skinName = 'feeds/rss10'; break; case 'rss2.xml': $skinName = 'feeds/rss20'; break; case 'atom.xml': $skinName = 'feeds/atom'; break; }
の部分も、上で書き換えたものに対応させる形で書き換えます スキン名を変更する場合はこの部分を書き換えてください
これ変える人あまり居ないと思ったんで決め打ちにしちゃってます
そのままだと「アクセスページ」部分のリンクが正常に出力されませんので以下の改造をします NP_Analyze(v0.533)の1256行目付近
function IdChange($select = '', $id = '', $other = '', $past = '', $c = '', $que = '', $hd = '') { global $CONF, $member;
を
function IdChange($select = '', $id = '', $other = '', $past = '', $c = '', $que = '', $hd = '') { global $CONF, $member, $manager;
に、その下1260行目付近
switch(TRUE) { case ($past == '+'):
を
switch(TRUE) { case ($manager->pluginInstalled('NP_CustomURL')): case ($past == '+'):
に変更することで、正常に URL が出力されます
※最新版のNP_ContentListでは以下の改造は不要です。
こちらも URL 出力を正常にする変更
このプラグインは、独自に URL を生成しているので、ここをグローバルファンクションを使用するように書き換えます
「function doSkinVar()」内の467行目からの
// sub category ---
で括られているブロックの486行目
$subdata['sublink'] = addLinkParams($catdata['catlink'], array($subrequest => $subdata['subcatid']));
と書いてある次の行に
if ($CONF['URLMode'] == 'pathinfo' && $manager->pluginInstalled('NP_CustomURL')) { $customurls = $manager->getPlugin('NP_CustomURL'); $subdata['sublink'] = $customurls->_addLinkParams($catdata['catlink'], array($subrequest => $subdata['subcatid'])); }
と挿入、396行目から465行目までの
// Categories --------------------
ブロックの終了後、466行目に
if ($CONF['URLMode'] == 'pathinfo' && $manager->pluginInstalled('NP_CustomURL')) { $catdata['catlink'] = createCategoryLink($catdata['catid']); }
最後に348行目の
$data['self'] = $data['blogurl'];
の前の行に
if ($CONF['URLMode'] == 'pathinfo' && $manager->pluginInstalled('NP_CustomURL')) { $data['blogurl'] = createBlogidLink($data['blogid']); }
を追加すれば完了です (行番号はバージョン2.0のものになります)
そのままだと URL の真ん中にタグのリンクが入ったりしてややこしいんで、必ず最後に来るように URL 生成部分を変更 一番最後のファンクション
creatTagLink()
の最後の
return addLinkParams($link, $linkparams);
の直前に、次のコードを挿入します
global $manager; if ($manager->pluginInstalled('NP_CustomURL')) { $customurls = $manager->getPlugin('NP_CustomURL'); $link = 'tag/' . $ready . $sep . $this->_rawencode($tag); return $CONF['BlogURL'] . '/' . $customurls->_addLinkParams($link, $linkparams) . '/'; }
これでタグがURLの一番最後になります
外部からのトラックバックはむ改造で対応してますが、このままだとローカルトラックバックが打てないので改造します 2479行目あたりからの
function handleLocalPing($itemid, $title, $excerpt, $blog_name, $ping_url){ global $manager;
のブロックの
} elseif ( preg_match("/itemid=([0-9]+)/",$ping_url,$idnum) ){ $tb_id = intval($idnum[1]); }
と
if ((!$manager->existsItem($tb_id,0,0)) && ($this->getOption('CheckIDs') == 'yes')) return _ERROR_NOSUCHITEM . "[ $tb_id ]";
の間に、次のコードを挿入します
if ($manager->pluginInstalled('NP_CustomURL')) { $plugin =& $manager->getPlugin('NP_CustomURL'); $tmp_url = parse_url($ping_url); $$tmp_url['path'] = trim($tmp_url['path'], '/'); $path_arr = explode("/", $$tmp_url['path']); $i = count($path_arr) - 1; if (substr($path_arr[$i], -5) == '.html') { $item_name = $path_arr[$i]; $trush = array_pop($path_arr); } elseif (substr($path_arr[$i], -10) == '.trackback') { $item_name = (substr($path_arr[$i], 0, -10)) . '.html'; } $trush = array_pop($path_arr); $blog_url = $tmp_url['scheme'] . '://' . $tmp_url['host'] . '/' . implode('/', $path_arr); $blog_url = preg_replace('|[^a-zA-Z0-9-~+_.?#=&;,/:@%]|i', '', $blog_url); $tbbid = quickQuery('SELECT bnumber as result FROM '.sql_table('blog').' WHERE burl = "'.$blog_url.'"'); $tbbid = intval($tbbid); if (!empty($tbbid) && $plugin->getBlogOption(intval($tbbid), 'use_customurl') == 'yes') { $item_name = preg_replace('|[^a-zA-Z0-9-_.]|i', '', $item_name); $que = 'SELECT obj_id as result FROM %s WHERE obj_param = "item" AND obj_name = "%s" AND obj_bid = %d'; $tbiid = quickQuery(sprintf($que, sql_table('plug_customurl'), $item_name, intval($tbbid))); if (!empty($tbiid)) $tb_id = intval($tbiid); } }
「/trackback/item_123.html」「/item_123.trackback」の両方に対応できます
当プラグインをインストールしていてもindex.php?itemid=xxxによるアクセスは可能です。検索エンジン対策上、URLの多重登録を防ぎたい場合はrobots.txtに以下を記述します。
User-agent: * Disallow: /index.php?* User-agent: Googlebot Noindex: /index.php?*
さくらインターネットのサーバで Internal Server Error(500) のエラーが出ることがあります。この場合は.htaccessの中身を
RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?virtualpath=$1 [L,QSA]
(RewriteBase / の行を追加)
または
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?virtualpath=$1 [L,QSA]
(index.phpの頭に / を付ける)
を試してみてください。