web-dev-qa-db-ja.com

mod_rewrite / htaccessをセットアップしてURLマスキングとサブディレクトリへの転送を行う方法は?

Apacheとphp(thinとnignxを使用している;)で遊んでから約3年です。そのため、mod_rewriteディレクティブをセットアップして、ルートからのすべてのhttp要求をアプリケーションのインストールされたフォルダーに転送する方法を忘れました。

現在の設定と制限:

  • サイトは共有cpanelホスティングサービス上にあります。このサービスでは、アプリケーションをルートとしてインストールできません(バージョン管理に関する本のバグではありません)。
  • CMSアプリケーションはjoomla-1.5.60 /の下にインストールされました
  • /jomla-1.5.60/$1にリダイレクトするように/(.*)をセットアップする必要がありますが、/(。*)としてブラウザを確認します
  • RedirectMatchが機能しない
  • アカウントの制限のため、アプリケーションのルートとしてdocrootを確立できません

Apacheでドキュメントを読みましたが、リダイレクトループが発生し続けます。ですから、皆さんが提供できる助けはありがたいです。

ありがとう。

1
Dwight Spencer

これを整理していない場合は、Pastebinリンクにある書き換えルールを見てください

RewriteRule ^(.*)$ http://www.diviniti.cc/joomla-1.5.20/$1 [R=301,QSA,L]

ここにあなたの欲望を打ち負かしているものがいくつかあります:

  • R=301ディレクティブはブラウザを実際に「立ち去らせ」、書き換えられたURLをロードし、ブラウザのURLを変更します
  • also任意のnon-wwwサブドメインをwwwサブドメインにリダイレクトすることも、URLのjoomla部分をブラウザ。

代わりに、2つのルールを試してください。

Options +FollowSymlinks
RewriteEngine On

# 1. redirect (bounce) all non-www to www [as per Apache docs][1] - retaining query strings
RewriteCond %{HTTP_Host}   !^www\.example\.com [NC]
RewriteCond %{HTTP_Host}   !^$
RewriteRule ^/(.*)         http://www.example.com/$1 [L,R,QSA]

# 2. then, use joomla but hide the joomla dir - note the lack of 'R' directive
RewriteRule ^(.*)$ /joomla-1.5.20/$1 [QSA,L]

「すべてのサブドメインをwwwにする」ことを強制する必要がない場合は、ルール1をスキップして、ルール2のままにします。

「ルート」のために、Pastebinで行った2回目の書き換えは必要ありません。

# Also redirect the root folder.
RewriteCond %{HTTP_Host} ^(*.)?diviniti\.cc$
RewriteRule ^(/)?$ joomla-1.5.20/index.php [L]

提供されたリライトの^(.*)$は、URLがhttp://www.example.com/である場合にも一致するためです

現在、Joomla自体はこのchi笑に満足していない可能性があります。documentrootが別のことを言っている間、この擬似ルートにいることを深く嫌がるかもしれません。

1: http://httpd.Apache.org/docs/2.0/misc/rewriteguide.html#url 「Apacheドキュメントごと」

2
Gavin C