web-dev-qa-db-ja.com

.htaccess(AddIcon AddDescription AddAlt)がディレクトリ.URLファイルで機能しない

最近、.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サイト組織にとって重要です。

本当に助かります。

2
SoSaysSunny

しかし、.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]

NSnosubreq)フラグを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
2
MrWhite