メタデータ
私のサーバー設定
ワイルドカード サブドメインとオプションの先行する www を持つ共有ホスト。RewriteRule などが適用されますが、httpd.conf に触れることができず、.htaccess ディレクティブが制限されています。
ディレクトリごとの .htaccess ファイルを使用します。
私のサーバーレイアウト
ほとんどのサブフォルダー (読み取り: 一部は gfx 用など) はスタンドアロン アプリケーションです。f.ex: URL 短縮サービス、画像アップロード サイト。
通常の PHP コントローラーのセットアップ
アプリケーションを操作するには、f.ex。アップロードされた特定のファイルを表示します。保存されている場所から取得する$_SERVER['QUERY_STRING']
などの URI を使用するためにを読みました。http://s.domain.com/?image.jpg
このセットアップは、アプリケーションごとに異なる場合があります。
問題
私が持っているもの
例
URL 短縮サービス:
http://s.domain.com/?xy7r
ORhttp://www.domain.com/s/?xy7r
はデータベースからハッシュを取得し、ユーザーをリダイレクトします。
画像アップローダー:
http://d.domain.com/?xy7r.png
またはhttp://www.domain.com/d/?xy7r.png
リダイレクト先http://d.domain.com/u/xy7r.png
(注: www. はすべての場合でオプションです)
私が欲しいもの
Apache の mod_rewrite を使用するように既存のアプリケーションを調整します。
例
URL 短縮サービス:
http://s.domain.com/xy7r
またhttp://www.domain.com/s/xy7r
画像アップローダー:
http://d.domain.com/xy7r.png
またhttp://www.domain.com/d/xy7r.png
私のアプローチ
最初は幸せなハッカーのように RewriteRules を追加していましたが、すべてうまくいきましhttp://sub.domain.com
たhttp://www.domain.com/sub
。
両方の URI ケースでルールが機能するように、条件を設定してみることにしました。そこで、Google で FUd を使用して、仕様、ドキュメント、チュートリアルを読みました。私はこの指示を完全には理解していませんが、ネット上で適切な解決策や同様の問題を見つけたとは思いません。
それからあきらめて、代わりに 2 番目の URI 構文 ( http://www.domain.com/sub/
) を優先するもの ( http://sub.domain.com
) (またhttp://www.sub.domain.com
)にリダイレクトして、既存RewriteRule
のを適用することにしました。
これまでの私の.htaccess
( URL Shortenerについてのみ、動作するようになるまで先に進まないため)
RewriteEngine On
RewriteCond %{HTTP_HOST} !^s\.domain\.com$ [NC] # Exclude correct URI
RewriteCond %{HTTP_HOST} !^$ # Exclude old HTTP requests
RewriteCond %{REQUEST_URI} ^/s($|/.*$) # Rewrite bad URI
RewriteRule ^.* http://s.domain.com/$1 [R=permanent] # Redirect to correct URI
RewriteCond %{REQUEST_URI} !^/fonts/ # Exclude system folder
RewriteCond %{REQUEST_URI} !^/index.php # Exclude system file
RewriteCond %{REQUEST_URI} !^/style.css # -||-
RewriteCond %{REQUEST_URI} !^/script.js # -||-
RewriteCond %{REQUEST_URI} !^/short.php # -||-
RewriteRule ^(.+)$ http://s.domain.com/?$1 # Rewrite to actual URI
私が得るもの
URI のようなものhttp://s.domain.com/xy7r
は、www. が先行するのと同じように機能しますが、http://www.domain.com/s/xy7r
URI 構文はxy7r部分にリダイレクトされhttp://s.domain.com
、無視されます。
質問
私は正しい軌道に乗っていますか、それともこれを行うためのより良い/より正しい方法はありますか? 私はRewriteBase
ディレクティブを理解しようとしてきましたが、まったく理解できず、orRewriteBase /s/
のような値を試してみましたが、満足していません。s
/s
いずれにせよ、私は完全に停止しており、どのように進めればよいかわかりません。どんな助けでも大歓迎です!
ありがとうございました!
</WOT>