このページについて

昨日公開したTwitterのリンクで404が出ちゃう現象を解決するコードに不備があったので修正しました。

 プライバシーポリシー / 免責事項

昨日公開した
  「ツイート上に含まれたリンク」と「つぶやき」が、半角スペースを含ま
   なかった為にくっ付いちゃったURLを「サーバー側で上手く処理する」
コードに、不備があったので修正しました。

参考:昨日の記事
 (このサイト)Twitter の「半角スペース入れるの忘れちゃったリンク」の404エラーを解消
 (裏ブログ)Twitter などでURLに全角が含まれ404エラーになっちゃう場合の回避方法
 ↑修正済み。昨日も閲覧した場合は上記ページでリロードが必要です。

URL中に「.html」が複数含まれていた場合に上手く作動しないってのは認識していましたが、以下条件で無限ループしてしまいます。

無限ループする条件
「.html」が複数回含まれ、かつ末尾が「.html」で終了
していた場合
うーむ。。。これはまずい。


http://aaa.com/aaa.htmlhttp://bbb.com/bbb.html
▲こんな風にURLが2個つながったリンクの場合の判定が甘く、無限ループしちゃう。

以下修正版です。
サーバーの.htaccess またはApache のhttpd.conf どちらかに記述します。
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !^.*\.html.*\.html$
RewriteRule ^(.*)\.html.*\.html /$1\.html [R=301,L]
RewriteCond %{REQUEST_FILENAME} !^.*\.html$
RewriteCond %{REQUEST_FILENAME} "\.html.*"
RewriteRule ^(.*)\.html.* /$1\.html [R=301,L]

 ※赤字部分が追加コード。

おまけ
ちなみに以下のような簡略書式でも作動しない。永久ループしちゃう。
RewriteEngine On
RewriteBase /
#RewriteCond %{REQUEST_FILENAME} !^.*\.html$ #←無効にしてみる
RewriteCond %{REQUEST_FILENAME} "\.html.*"
RewriteRule ^(.*)\.html.* /$1\.html [R=301,L]

 RewriteCond %{REQUEST_FILENAME} !^.*\.html$
 の一文を無効にしても上手く作動するような気がするんだけどなぁ・・・(^_^;

パラメータ -s とか !-f くっ付けて、ファイルの有無を確認すればもっと完璧なディレクティブが出来上がりそうだけど、RewriteRuleを2回使わず、1回で済む方法もありそうだけど、、、私の腕前では時間がかかりそうなので、それはまた別の機会に。