2011-08-26 12 views
5

mod_rewriteではあまりよくありませんが、今は本当に必要です。RewriteRuleは1つのフォルダ以外のすべてをリダイレクトします

siteという名前のフォルダに新しいウェブサイト全体があります。したがって、新しいウェブサイトに行く必要がある場合、URLはhttp://domain.com/site/...のようになります。今度はURLからsiteを除外する必要がありますが、uploadという1つのフォルダ以外は/site/になります。これどうやってするの?

のでhttp://domain.com/anything.exthttp://domain.com/anyfolderはまだdomain.com/uploadを指すdomain.com/upload以外http://domain.com/site/...を指します。

次に、別の質問は、これは一時的な解決策としてのみ有効であると考えていますか、それとも本当に問題ではないと思いますか(スピードと効率性を考える)?

答えて

7

この使用(あなたのドキュメントルートに.htaccessファイル内のルールを入れていると仮定):あなたはhttpd.confの中にそれを入れている場合は

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^upload 
RewriteRule (.*) site/$1 [L] 

を、あなたは少しそれを変更する必要があります。

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/upload 
RewriteRule (.*) /site$1 [L] 

第2の質問に関して、私は個人的にmod_rewriteが気に入らず、あなたが絶対にしなければ永久的な解決策として使用しません。これは、mod_rewriteが非常に効率が悪い、特にビジー状態のサーバーでは、1回の受信要求ごとに少なくとも1つの正規表現を実行する必要があるためです。 [L]フラグを必ず使用して、必要以上のルールが処理されないようにする必要があります。

ディレクトリをアプリケーションが参照するのと同じ方法で構造化する方が常に効率的です。上記はあなたを働かせるべきですが、あまりにも長くそれをその場所に残さないようにしてください。

すでに知っていると思いますが、hereはmod_rewriteのドキュメントです。

+0

私は(.htaccessコード)を使用すると、内部サーバーエラーを示します。私は何が間違っているのか分からなかった。 – Boyd

+0

エラーが発生したときにあなたのApacheログには何が表示されますか? ;-) – DaveRandom

+0

私のクライアントホスティング会社は、お尻の痛みです。彼らはhtaccessの問題をサポートしていないので、私にログを送ろうとはしません。彼らはhtaccessの機能を制限していないと言いました。私のコードが大丈夫だと仮定すると、私はちょうどホスティング会社に連絡し続けるべきですか、それともInternal Server Errorの別の原因があるのでしょうか? (.htaccessが上のコードを含んでいることを示すだけであることを忘れないでください) – Boyd

関連する問題