2013-06-04 11 views
6

私は、.htaccessでSEOに優しいマスク書き換えを作成しようとしています。 htaccessファイルはlocalhostと個人用サーバでうまく動作しますが、残念ながらGoDaddyのサーバでは動作しません。私はそれが既に問題であることを認識していますが、Godaddyをホストとして使用するクライアントのために働いています。.htaccess内部リダイレクトへのクエリ文字列の追加

問題は、書き換えられたクエリー文字列をブラウザのURLバーに表示するリダイレクトを内部的に保持するのではなく、強制的にリダイレクトしているようです。例えば、 。

ルール:

RewriteRule ^/?([a-zA-Z0-9-_/]*)$ /index.php?loadPage=$1&mode=cms [L,QSA] 

リンク:/imagesリダイレクト/images/?loadPage=images&mode=cms

には、これは、ブラウザのため/images/として滞在する「はずです」。私はコピーした私の短い以下.htaccess、開発ブロック

<Files .htaccess> 
    deny from all 
</Files> 

Options -MultiViews +FollowSymlinks -Indexes 

RewriteEngine On 
RewriteBase/

# Stop Old redirection from block below 
RewriteCond %{REQUEST_URI} "/old/" 
RewriteRule (.*) $1 [L] 

# Under construction Redirect 
RewriteCond %{REMOTE_ADDR} !^0.0.0.0 
RewriteCond %{REQUEST_URI} !^/?old/ 
RewriteRule ^/?(.*) “/old/$1″ [L,QSA] 

#Admin utilities rewrite 
RewriteRule ^/?admin/?(.*)$ /index.php?loadPage=$1&mode=backend [L,QSA] 

#CMS/Frontend rewrites -- this one is failing 
RewriteRule ^\/?([a-zA-Z0-9-_]+)\/?$ /index.php?loadPage=$1&mode=cms [QSA,L] 
用に変更IPアドレス

潜在的なノートのヒントが表示されたURLが/images/?query_string、NOT index.php?query_stringなので、外部の要求は受けているものの、それは、完全なリダイレクトをやっていないということですページ要求からの301応答。私は単純にその行を見ているが、何をテストしていない

+0

は、以下のリンクを参照してくださいか、あなたはまた、チームhttp://support.godaddy.com/groups/web-hosting/forum/topic/problem-using-htaccess-for-url-rewrite/をサポートするためにcontectことができますhttp://support.godaddy.com/groups/web-hosting/forum/topic/how-do-i-use-htaccess-to-redirect-my-document-root-and-mask-the-url/? sid =&sp = 1 –

+0

リンクをありがとうございます、残念ながら私はそれらの両方を調査し、どちらも私の状況には当てはまりません。 –

答えて

2

...

RewriteRule ^\/?([a-zA-Z0-9-_]+)\/?$ /index.php?loadPage=$1&mode=cms [QSA,L] 

は構文エラーがあります。 9の後のハイフンは、技術的に範囲標識であると逃げなければなりません。たいていの場合、人々は最後に]の前に置くので、エラーは発生せず、ほとんどの人はそれをエスケープする必要はないと考えています。スラッシュをエスケープする必要もありません。また、疑問符を使用すると、以前のオプションが作成され、その理由を知ることができません。だからこのようになります:

RewriteRule ^([a-zA-Z0-9\-_]+)/?$ /index\.php?loadPage=$1&mode=cms [QSA,L] 
+0

オプションの閉じスラッシュは、スラッシュの後に何もない場合(セキュリティと関係がある)、「素晴らしい」ブラウザアドオンがリンクから後続のスラッシュを削除するためです。奇妙なことに、後書きのスラッシュでアクセスすると、書き換えは正しく動作しますが、存在しない場合は動作しません。元の管理者の書き換えは同じことをします(ちょっとちがいません)。完全に動作するので、マッチ値がどのように解釈されているかで何かを考えます。もう少し遊んでいきます。 (残念ながら、示唆された変更は問題を変えなかった)。 –

+0

後ろにスラッシュが付いていない着信リンクに対して301リダイレクトを追加して、自分の望むようにルールを適用しました。むしろ1つのルールではオプションにすることができますが、少なくともそれはうまく動作します。私を正しい軌道に乗せてくれてありがとう! –

0

私は何が起こっているかを知ることができるように他のルールのいくつかをコメントアウトしました。あなたは "古い"で始まっていないものをすべて取り出し、それを古いディレクトリに書き換えていました。先行するルールは、あなたが '/ old /'という単語を見つけた場所にあるものをすべて取り出して、自分自身にリダイレクトしているように見えます。あなたは今まで0.0.0.0からのリクエストを受け取るべきではありません。

最後のルールのハイフンは、角括弧の最後に移動する必要があります。そのため、Apacheは範囲を探していません。

.htaccessを扱っているので、REQUEST_URIを使用していない場合は、先行するスラッシュは必要ありません。

RewriteEngine On 
RewriteBase/

# Stop Old redirection from block below 
RewriteCond %{REQUEST_URI} ^/old/(.*)$ 
RewriteRule .* %1 [L] 

# Under construction Redirect 
# RewriteCond %{REMOTE_ADDR} !^0.0.0.0 
# RewriteCond %{REQUEST_URI} !^/?old/ 
# RewriteRule ^/?(.*) /old/$1 [L,QSA] 

#Admin utilities rewrite 
RewriteRule ^admin/(.*)$ index.php?loadPage=$1&mode=backend [L,QSA] 

#CMS/Frontend rewrites 
RewriteCond %{REQUEST_FILENAME} !^index.php$ 
RewriteRule ^([A_Za-z0-9_-]+)/?$ index.php?loadPage=$1&mode=cms [QSA,L] 
+0

0.0.0.0 IPは開発用のサーバーにアクセスするIPのプレースホルダーです。私はハイフンで少し怠けていることに同意しますが、次の範囲の文字がないので、Apacheは通常それを理解することができます。私はこれらの変更をテストし、残念ながら問題は解決しません。私はまた、RewriteEngine以外のすべてのルールとフロントエンドの書き換えをコメントアウトしていますが、それでも同じ結果です。したがって、ルールの競合ではないようです。 –

関連する問題