pretty URLの基本的なURLリダイレクトを達成しようとしています。イメージ、CSSなども同じパスに存在するため、URLがスラッシュを付けずにアクセスすると自動的に追加されます。相対URLへのmod_rewriteリダイレクトを行う方法
私はこのような絶対URLを入れた場合、これは正常に動作します:
RewriteRule ^myParentDir/([A-Z0-9_-]+)$ http://www.mydomain.com/myParentDir/$1/ [R,nc,L]
しかし、私はそれを私はフォルダで物事を移動するたびに変更する必要がないように、私は、相対URLに変更する場合これは単に機能しません。
これらは私が試したどのようなものであり、全てが動作し、または/ public_htmlの/ ...のようなサーバーの実際の内部ディレクトリパスに私をリダイレクトしません:行うには正しい方法です
RewriteRule ^myParentDir/([A-Z0-9_-]+)$ ./myParentDir/$1/ [R,nc,L]
RewriteRule ^myParentDir/([A-Z0-9_-]+)$ myParentDir/$1/ [R,nc,L]
何URLのリダイレクトユーザーが何か入力した場合ように:
http://www.mydomain.com/somedir/myVirtualParentDir/myVirtualSubdir
を彼は(HTTP 301または302を介して)にリダイレクトされます:
http://www.mydomain.com/somedir/myVirtualParentDir/myVirtualSubdir/
ありがとうございます。
EDIT:明らかではないため、詳細を追加してください。 私はギャラリーを実装しているといい、mod_rewriteを使ってかなりのURLを使いたいとします。 だから、私は次のようなURLがしたい:猫のサムネイルを示し
http://www.mydomain.com/somedir/galleries/cats
を、しばらく:ペルシャという名前のすべての猫のサムネイルから一つの画像を示し
http://www.mydomain.com/somedir/galleries/cats/persian
。 だから、実際には物理的なディレクトリ構造と次のようになり書き換え:
http://www.domain.com/somedir/gallery.php?category=cats&image=persian
をだから私は/ギャラリーに作られたとに応じて、すべての要求をキャッチしている/ somedirで.htaccessファイルを入れて何をしたいのかそれを次の仮想サブディレクトリが、2書き換えルールで、書き換えのプレースホルダとしてそれらを使用する:
RewriteRule ^galleries/(A-Z0-9_-]+)/$ ./gallery.php?category=$1 [nc]
RewriteRule ^galleries/(A-Z0-9_-]+)/+([A-Z0-9_-]+)$ ./gallery.php?category=$1&image=$2 [nc]
さて問題は、実際にはギャラリースクリプトがhttp://www.domain.com/somedir/css、http://www.domain.com/somedir/jsに位置いくつかのCSS、Javascriptとイメージを、必要とすることで、それぞれhttp://www.domain.com/somedir/imagesである。
絶対URLをハードコードしたくないので、CSS、JS、およびイメージは相対URL(./css、./js、./imagesなど)を使用して参照されます。
RewriteRule ^galleries/[A-Z0-9_-]+/css/(.*)$ ./css/$1 [nc]
問題はhttp://www.domain.com/somedir/galleries/cats仮想ディレクトリであるため、ユーザーがあれば、上記にのみ動作することです::
http://www.domain.com/somedir/gallaries/cats/
ユーザーが最後のスラッシュを省略した場合は、次のようにだから私は、URLの書き換えを行うことができmod_dirは実際にはこのディレクトリが実際には存在しないため、追加しません。
私はそれが動作する絶対URLにリダイレクトリライトを置く場合:
RewriteRule ^galleries/([A-Z0-9_-]+)$ http://www.mydomain.com/subdir/galleries/$1/ [R,nc,L]
をしかし、私は、私が好きなドメインでこれを置くことができるようにしたいので、私はハードコードされたURL接頭辞を持っている必要はありません私が好きなサブディレクトリに、私はこの試みた:
RewriteRule ^galleries/([A-Z0-9_-]+)$ galleries/$1/ [R,nc,L]
をしかし、その代わりに、それはにリダイレクト:
http://www.mydomain.com/home/myaccount/public_html/subdir/galleries/theRest
明らかに私が望むものではありません。
EDIT:さらに明確化
私が探しています解決策は、.htaccessファイル内のドメイン名またはフォルダパスをハードコーディングを避けるためです。私は、スクリプトとリソースの残りの部分で.htaccessをパッケージ化すると、ユーザーが自分のWebサーバーでそれを解凍した場所であれば、それはそのままで動作するソリューションを探しています。この後のスラッシュの問題とは別に、すべてのことがそうです。
親ディレクトリやウェブサーバのパスを.htaccessでハードコーディングする方法は、私が探しているものではありません。
@DoktorJ私の投稿の編集はあなたの質問に答えますか? –
あなたの受け入れられた答えを選択してください。 – sjas