ファイルを提供し、サーバーのディレクトリ構造を隠すために、アンカー タグと組み合わせて .htaccess を使用しています。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /_docu/clients/$1/$2/$3.pdf [NC,L]
たとえば、すべてのファイルが/public_html/_docu/clients/
そのフォルダーの下および内部に保存され、すべてのクライアントがリストされ、次に各クライアントの下にプロジェクトがリストされます。ただし、ファイルのアンカー タグは読み取り専用です。
http://mydomain.com/client-name/proj-name/docname.pdf
(/_docu/clients/ が省略されています - これには十分な理由があります)。上記の .htaccess はを取得しclient-name
、正しいフォルダーから提供します。proj-name
docname
http://mydomain.com/_docu/clients/client-name/proj-name/docname.pdf
アドレスバーに誤った(隠された)ディレクトリ構造を保持しながら。
ドキュメントが存在しないというエラー状態を処理したいと考えています。これは決して起こらないはずですが、起こる可能性があります。誰でもこれに対処する方法を提案できますか? 「if fileexist($1/$2/%3.pdf)」に機能的に似たものを.htaccessファイルで何らかの形で構築できますか?
編集:
以下のJLの回答には調査と実験が必要だったため、回答が遅れました。ジョン、正しい方向への穏やかなプッシュに対して感謝しますが、まだ機能していません。これが私が試したことです:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# check if the requested file exists in the "_docu/clients" directory
RewriteCond %{DOCUMENT_ROOT}/_docu/clients/$1/$2/$3.pdf -f
RewriteRule ^([a-z0-9])/([a-z0-9])/([a-z0-9]*).pdf$ /_docu/clients/$1/$2/$3.pdf [NC,L]
RewriteRule ^(.*)$ /errors/404.php [L]
それがすべきことは次のとおりだと思いました:
http://mydomain.com/_docu/clients/$1/$2/$3.pdf
存在しない場合、- ページに移動
http://mydomain.com/errors/404.php
実際の結果は、「内部サーバー エラー」メッセージです。
編集2:
最新の変更:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/([a-z0-9])/([a-z0-9])/([a-z0-9]*).pdf$
RewriteCond %{DOCUMENT_ROOT}/_data/cli/%1/%2/%3.pdf -f
RewriteRule ^([a-z0-9])/([a-z0-9])/([a-z0-9]*).pdf$ /_data/cli/$1/$2/$3.pdf [NC,L]
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule ^(.*)$ /metshare/404.php [L]
この問題は、正当なページも 404.php に誘導されることです。
将来の読者へのメッセージ:
上記の懸念事項はすべて、Jon Lin の最終的な回答で対処されています。問題が検出されると、彼はそれが完璧で機能するソリューションになるまで回答を修正しました。バージョンを比較したい人のために、(予定外の学習機会) 内にいくつかの良い ULO があるため、上記はそのままにしておきます。