最近、.htaccess
ファイルとスクリプトを使用して、.URL
ショートカットをディレクトリリストの機能リンクに書き換える方法を学びました。
そのソリューションはうまく機能しています...しかし、.htaccess
アイテムを変更するための他の.URL
呼び出しは機能しません(他のすべてのファイルタイプとは異なります)。
AddIcon http://SoSaysSunny.com/icos/url.ico .URL
AddDescription "<I>(web link)</I>" .URL
AddAlt "URL" *.URL
書き換えプロセスはファイル拡張子を変更しましたか?
これらのファイルを参照する他の方法はありますか?
その問題を修正したら、別の問題があります。Webストアへのリンクのファイル名は「$」で始めます。この命名スキームでファイルを指定するにはどうすればよいですか?
動作しないのは次のとおりです(他のファイルタイプでも)。
AddIcon http://SoSaysSunny.com/icos/cart.ico $*.URL
AddDescription "<I>(web store link)</I>" $*.URL
ディレクトリリストを使用することは多くの作業のように思えますが、それは(HTMLインデックスファイルを絶えず更新する必要がないように)私のWebサイト組織にとって重要です。
本当に助かります。
しかし、
.htaccess
アイテムを変更する他の.URL
呼び出しは機能しません(他のすべてのファイルタイプとは異なります)
ああ、はい、「問題」は、実際にPHPスクリプト(リダイレクトするURLを取得するためにファイルを解析する)に.URL
ファイルのリクエストを送信するmod_rewriteコードにあります。これにはちょっとした変更が必要です:NS
ディレクティブにはRewriteRule
フラグが必要です。
問題は、Apacheがディレクトリリストを作成するときに、リストされている各ファイルに対して内部サブリクエストを発行するという事実に起因します。 mod_rewriteコードは必要のないこの内部サブリクエストを書き換え、AddIcon
ディレクティブが一致しないようにします(.url
リクエストは.php
スクリプトに書き換えられるため)。 (ユーザーからの直接要求を書き換えるだけです。) 質問に対する以前の回答 に基づいて、おそらく.htaccess
ファイルに次のようなものがあります。
# Rewrite requests for ".url" files to our PHP script RewriteCond %{REQUEST_FILENAME} -f RewriteRule .\.url$ process-url-shortcut.php [NC,E=URL_FILE:%{REQUEST_FILENAME},L]
NS
(nosubreq
)フラグをRewriteRule
に追加するだけで、サブリクエストのディレクティブが処理されないようにできます(つまり、non-subrequests)。例えば:
RewriteRule .\.url$ process-url-shortcut.php [NS,NC,E=URL_FILE:%{REQUEST_FILENAME},L]
Webストアへのリンクのファイル名は「$」で始まります。この命名スキームでファイルを指定するにはどうすればよいですか?
わかりました、これは少し奇妙なものです。ただし、ワイルドカードパターンを$*.URL
から*$*.URL
に変更すると、これは機能するようです。パターンに*
を追加します($
の前に文字が存在するかのように-しかし、存在しません)。したがって、たとえば:
AddIcon http://SoSaysSunny.com/icos/cart.ico *$*.URL AddDescription "<I>(web store link)</I>" $*.URL
AddDescription
ディレクティブは、$*.URL
パターンでも問題なく動作するようです!
http://SoSaysSunny.com/icos/cart.ico
別の潜在的な問題は、アイコンに ICO形式ファイル を使用しているように見えることです(mime-type:image/x-icon
)。これは主にMicrosoft Windowsファイル形式であるため、すべてのOS /デバイスで(正しく)表示されるわけではありません。例えば。懸念がある場合、これらはAndroid/iOS(iPhone/iPad)ではまったく表示されません。代わりにPNG(またはGIF)ファイルを使用することをお勧めします。
...常にHTMLインデックスファイルを更新する必要を回避するため
ファイルをアップロードするたびにインデックスファイルを手動で更新する必要はありません。ただし、Apacheに依存する代わりに、ディレクトリリストを生成する(PHP)スクリプトを使用することもできます。これは最初はもっと手間がかかるかもしれませんが(事前に作成されたスクリプトがない場合)-これにより、はるかに優れた制御と移植性の高いソリューションが得られる可能性があります。
UPDATE:
...しかし、
*$*.URL
変更はまだ機能していません。
最も具体的なディレクティブ/パターンが最初になるように、ディレクティブの順序を変更する必要があります。言い換えれば、あなたは現在持っています:
AddIcon http://example.com/icos/url.png .URL AddDescription "<I>(web link)</I>" .URL AddIcon http://example.com/icos/cart.png *$*.URL AddDescription "<I>(web store link)</I>" $*.URL AddAlt "URL" *.URL
ディレクティブを逆にする必要があるため、最も具体的な(つまり$*.URL
)が最初になります。
AddIcon http://example.com/icos/cart.png *$*.URL
AddDescription "<I>(web store link)</I>" $*.URL
AddIcon http://example.com/icos/url.png .URL
AddDescription "<I>(web link)</I>" .URL
AddAlt "URL" *.URL