Top/PukiWiki/改造/静的コンテンツに偽装/ページ2

ページ2 の変更点はてなブックマーク


いまいち :p

*URLをエンコードされたものだと認識されない形に偽装
**問題
+[[PukiWiki/改造/静的コンテンツに偽装/ページ]] を行っても、~
URLに%が含まれているので動的ページだとバレてるかもしれない。
+URLがGETで渡される場合(翻訳サービスなど)、URL中のページ名が内部でデコードされる際に~
巻き添えを食らって化けたり、消失したりすることがある。((URLは http%3A%2F%2Fcubic9.com などとエンコードされてQUERY_STRINGに入るが、このときにPukiWikiでエンコードした文字列が紛れてしまう。))

**解決するには
そこで、URLをエンコードされたものだと認識されない形にしてしまえば、~
問題を解決できるのではと考えた。~
具体的にはURL中の%を任意の文字(列)で置換したURLで~
ページにアクセスできるようにする。~
SEO上の効果は不明。((10/14現在は逆効果な気がしてきました :( ))

**動作
|~適用前|cubic9.com/PukiWiki/%B2%FE%C2%A4/SEO%C2%D0%BA%F6/|
|~適用後|cubic9.com/PukiWiki/~B2~FE~C2~A4/SEO~C2~D0~BA~F6/|
(cubic9.comは[[ディレクトリに偽装>PukiWiki/改造/静的コンテンツに偽装/ページ#dir]]のみ適用中ですので、リダイレクトされます。)~
ただし、チルダ "~" をURLに含めるのは本当は[[あまりよくない :p >http://ring.aist.go.jp/openlab/k16/htmllint/explain.html#unsafe-url]]((普通は "-" や "_" に置換し、ページ名にこれらの記号を使わないというポリシーで運営するのがいいのでは。))

**作業
-init.php~
221行目付近
#code(diff,nonumber,nooutline){{
-$arg = input_filter($arg); // \0 除去
+$arg = str_replace('~', '%', input_filter($arg)); // \0 除去
}}
-lib/func.php~
644行目付近~
[[PukiWiki/改造/静的コンテンツに偽装/ページ#dir]]で~
追加した関数anchor_replaceを書き換えます。
#code(diff,nonumber,nooutline){{
-// PukiWikiの階層をディレクトリに偽装
+// PukiWikiの階層をディレクトリに偽装 & "%" -> "~"
function anchor_replace($anchor)
{
-	return str_replace('%2F', '/', $anchor);
+	return str_replace('%', '~', str_replace('%2F', '/', $anchor));
}
}}

**テスト
|サービス|適用前|適用後|備考|h
|~POP辞書|[[×>http://www.popjisyo.com/WebHint/AddHint.aspx?d=1&u=http%3A//cubic9.com/PukiWiki/%25B2%25FE%25C2%25A4/SEO%25C2%25D0%25BA%25F6.html]]|[[○>http://www.popjisyo.com/WebHint/AddHint.aspx?d=1&u=http%3A//cubic9.com/PukiWiki/%7EB2%7EFE%7EC2%7EA4/SEO%7EC2%7ED0%7EBA%7EF6.html]]||
|~Amikai系(excite翻訳)|[[○>http://www.excite.co.jp/world/english/web/body/?wb_url=http%3A%2F%2Fcubic9.com%2FPukiWiki%2F%25B2%25FE%25C2%25A4%2FSEO%25C2%25D0%25BA%25F6.html&submit=%83E%83F%83u%83y%81%5B%83W%96%7C%96%F3&wb_lp=JAEN&wb_dis=2&wb_co=excitejapan]]|[[○>http://www.excite.co.jp/world/english/web/body/?wb_url=http%3A%2F%2Fcubic9.com%2FPukiWiki%2F%7EB2%7EFE%7EC2%7EA4%2FSEO%7EC2%7ED0%7EBA%7EF6.html&submit=%83E%83F%83u%83y%81%5B%83W%96%7C%96%F3&wb_lp=JAEN&wb_dis=2&wb_co=excitejapan]]||
|~WorldLingo翻訳|[[○>http://www.worldlingo.com/wl/translate?wl_lp=JA-en&wl_glossary=gl1&wl_fl=2&wl_ucp=1&wl_rurl=http%3A%2F%2Fcubic9.com%2FPukiWiki%2F%25B2%25FE%25C2%25A4%2FSEO%25C2%25D0%25BA%25F6.html&wl_url=http%3A%2F%2Fcubic9.com%2FPukiWiki%2F%25B2%25FE%25C2%25A4%2FSEO%25C2%25D0%25BA%25F6.html&wl_g_table=-3]]|[[○>http://www.worldlingo.com/wl/translate?wl_lp=JA-en&wl_glossary=gl1&wl_fl=2&wl_ucp=1&wl_rurl=http%3A%2F%2Fcubic9.com%2FPukiWiki%2F%7EB2%7EFE%7EC2%7EA4%2FSEO%7EC2%7ED0%7EBA%7EF6.html&wl_url=http%3A%2F%2Fcubic9.com%2FPukiWiki%2F%7EB2%7EFE%7EC2%7EA4%2FSEO%7EC2%7ED0%7EBA%7EF6.html&wl_g_table=-3]]||
|~キッズgooふりがな|[[○>http://kids.goo.ne.jp/cgi-bin/kgframe.cgi?TP=http%3A%2F%2Fcubic9.com%2FPukiWiki%2F%B2%FE%C2%A4%2FSEO%C2%D0%BA%F6.html]]|[[○>http://kids.goo.ne.jp/cgi-bin/kgframe.cgi?TP=http%3A%2F%2Fcubic9.com%2FPukiWiki%2F%7EB2%7EFE%7EC2%7EA4%2FSEO%7EC2%7ED0%7EBA%7EF6.html]]||
|~AltaVista翻訳|[[×>http://babelfish.altavista.com/babelfish/trurl_pagecontent?url=http%3A%2F%2Fcubic9.com%2FPukiWiki%2F%25B2%25FE%25C2%25A4%2FSEO%25C2%25D0%25BA%25F6.html&lp=ja_en]]|[[×>http://babelfish.altavista.com/babelfish/trurl_pagecontent?url=http%3A%2F%2Fcubic9.com%2FPukiWiki%2F%7EB2%7EFE%7EC2%7EA4%2FSEO%7EC2%7ED0%7EBA%7EF6.html&lp=ja_en]]|EUC-JPが通らない?|
あれ?POP辞書しか変わってない :(

//翻訳サイトなどにGETでURLが渡されることを考慮して((実際に translate.google.com/translate?sourceid=navclient-menuext&hl=en&u=http%3A%2F%2Fcubic9%2Ecom%2FSoft%2520%28Linux%29%2FPerl%2FMSN%2Epm%2520%28Bot%2DDepot%2520realesed%29%2Ehtml というアクセスがありました。このとき元々PukiWiki側でエンコードした %2F が翻訳サイトでエンコードした %2F に紛れてしまい、GET後内部で全て / にデコードされてからcubic9.comにリクエストが来ているようで、従来の方法では404になってしまっていました。))

*Amazon
#amazon(4798109223,left)
#amazon(479733245X,left)
#amazon(4798119865,left)
差分 一覧