0

メタデータ

私のサーバー設定

ワイルドカード サブドメインとオプションの先行する 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.comhttp://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>

4

1 に答える 1

0

ルールの最初のセットについては、

RewriteCond %{REQUEST_URI} ^/s($|/.*$)  # Rewrite bad URI
RewriteRule ^.* http://s.domain.com/$1 [R=permanent]  # Redirect to correct URI

RewriteRule ^s/?(.*) http://s.domain.com/$1 [L,R=302]
于 2012-05-23T21:31:48.713 に答える