メタデータ
私のサーバー設定
ワイルドカード サブドメインとオプションの先行する 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/?xy7rORhttp://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/xy7rURI 構文はxy7r部分にリダイレクトされhttp://s.domain.com、無視されます。
質問
私は正しい軌道に乗っていますか、それともこれを行うためのより良い/より正しい方法はありますか? 私はRewriteBaseディレクティブを理解しようとしてきましたが、まったく理解できず、orRewriteBase /s/のような値を試してみましたが、満足していません。s/s
いずれにせよ、私は完全に停止しており、どのように進めればよいかわかりません。どんな助けでも大歓迎です!
ありがとうございました!
</WOT>