2011-11-07 12 views
0

I次のコードを持っている:の.htaccessのRewriteRule条件

RewriteCond %{HTTP_HOST} ^m\.domain\.com?$ 
RewriteRule^http://domain.com/ipad%{REQUEST_URI} [L,P] 

だから私のサブドメイン、http://m.domain.comが本当にから引っ張っているhttp://domain.com/ipad/

入力するとすべて正常に動作します。http://m.domain.com/shop-name/は完全に動作します。しかし、末尾のスラッシュを省略してhttp://m.domain.com/shop-nameに入力すると、http://domain.com/ipad/shop-name/にリダイレクトされますが、これは起こりません。だれもipadディレクトリが表示されません。

私はこれをどのように修正できるか知っていますか?

ありがとうございました!

+0

を行方不明の301リダイレクトに対処するために編集されたが、「ショップ名」ディレクトリですか?中央のApache設定ファイル(httpd.confなど)やそれらのホストの 'VirtualHost'セクションにアクセスできますか? – JMM

+0

これは別のRewriteRuleです。実際のパスはindex.phpですか?shop_name =どんなものであれ、/ shop-name/ – Drew

答えて

1

これは、mod_dirが要求を内部的に処理している可能性があります。 http://m.domain.com/shop-nameにアクセスしてhttp://domain.com/ipad/shop-nameに書き換えると、mod_dir 302はブラウザをhttp://domain.com/ipad/shop-name/にリダイレクトします。

RewriteRuleで末尾のスラッシュを処理できます。おそらくクリーナーこれを行う方法が、の線に沿って何か:

RewriteCond %{HTTP_HOST} ^m\.domain\.com?$ 
# Has trailing slash in request, don't need to append one in the RewriteRule 
RewriteCond %{THE_REQUEST} ./\ HTTP/1\.[01]$ 
RewriteRule^http://domain.com/ipad%{REQUEST_URI} [L,P] 

RewriteCond %{HTTP_HOST} ^m\.domain\.com?$ 
# Missing trailing slash in request 
RewriteCond %{THE_REQUEST} [^/]\ HTTP/1\.[01]$ 
# Request doesn't end with one of these extensions, 301 redirect to include trailing slash 
RewriteCond %{REQUEST_FILENAME} !\.(php|html?|jpg|gif)$ 
RewriteRule . http://m.domain.com%{REQUEST_URI}/ [R=301] 

EDIT:末尾のスラッシュ

+0

にリダイレクトされました。私のリンクが一貫しているようにするために、後ろにスラッシュを入れたいので、/ shop-nameで時間をつければ、/ shop-nameにリダイレクトされます。私は、htaccessファイルのいくつかの異なるスニペットを後続のスラッシュを強制しようとしましたが、うまく動作しません。 #フォース末尾 するRewriteCondの%{REQUEST_FILENAMEを}スラッシュ\(PHP | HTML | JPG | GIF?)$ のRewriteRule^[^ /] + $%{REQUEST_URI}/[L、R = 301:私はこれを試してみました!。 ] – Drew

+0

第2回目のリライトの編集バージョンを参照してください。後ろにスラッシュがない場合は、後ろにスラッシュをつけてdomain.com *を渡す代わりに、スラッシュを含むようにブラウザをリダイレクトします –

+0

ありがとうございました。私はそれが素晴らしい仕事をしているあなたの助けに感謝:) – Drew