2017-05-12 14 views
1

私は301のリダイレクトと再書き込みURLパラメータを一度に実行しようとしています。私はここでいくつかの答えに従ってきましたが、それを働かせることはできません。ここで私が試したことがあります。コメントは私がそれが望んでいることを示し、実際にはそうではありません。URLのパラメータを書き換えてクエリ文字列を削除します

RewriteEngine on 

# Redirect from "/country.php?country=FR&recipe=Croissant" to "/FR/Croissant" 
RewriteCond %{THE_REQUEST} ^country\.php/?country=([A-Z]{2})&recipe=(.+) [NC] 
RewriteRule ^/%1/$2 [NE,L,R=301] 
# Redirect from "/country.php?country=FR" to "/FR" 
RewriteCond %{THE_REQUEST} ^country\.php/?country=([A-Z]{2}) [NC] 
RewriteRule ^/%1 [NE,L,R=301] 

# Internally map "/FR/Croissant" to "/country.php?country=FR&recipe=Croissant" 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^/([A-Z]{2})/(.+)/?$ country\.php/?country=$1&recipe=$2 [L] 
# Internally map "/FR" to "/country.php?country=FR" 
RewriteRule ^/([A-Z]{2})/?$ country\.php/?country=$1 [L] 

しかし、これは機能しません。私は例のいずれかを試してみても何も起こりません:

/country.php?country=FR&recipe=Croissant滞在/country.php?country=FR&recipe=Croissant/FR/Croissantを私はローカルホスト/食品/インデックスで、ドメイン(ローカルホスト/食品/のサブディレクトリでこれを実行している404

を返します。 phpおよびlocalhost/food/country.php)、htaccessファイルはそのディレクトリlocalhost/food/に置かれます。

私は間違っていますか?

答えて

1

あなたは正規表現パターンと、いくつかの構文の問題を修正する必要があります。

RewriteEngine on 
RewriteBase /food/ 

# Redirect from "/country.php?country=FR&recipe=Croissant" to "/FR/Croissant" 
RewriteCond %{THE_REQUEST} /country\.php\?country=([A-Z]{2})&recipe=([^&\s]*) [NC] 
RewriteRule^%1/%2? [NE,L,R=301] 

# Redirect from "/country.php?country=FR" to "/FR" 
RewriteCond %{THE_REQUEST} /country\.php\?country=([A-Z]{2}) [NC] 
RewriteRule^%1? [NE,L,R=301] 

# ignore rules below for files and directories 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule^- [L] 

# Internally map "/FR/Croissant" to "/country.php?country=FR&recipe=Croissant" 
RewriteRule ^([A-Z]{2})/(.+?)/?$ country.php?country=$1&recipe=$2 [L,QSA] 

# Internally map "/FR" to "/country.php?country=FR" 
RewriteRule ^([A-Z]{2})/?$ country.php?country=$1 [L,QSA] 

スタイルで問題を解決するには、画像など、あなたのCSS、JS、画像ファイルではなく、相対的な1で絶対パスを使用する必要があります。つまり、これらのファイルのパスがhttp://またはスラッシュ/のいずれかで始まるようにする必要があります。

さもないと、あなたは自分のページのHTMLの<head>セクションの下にこれを追加することができます。すべての相対URLがそのベースURLからではなく、現在のページのURLから解決されるように

<base href="/food/" /> 

+0

私はこれをドメインのサブディレクトリ(localhost/food /、localhost/food/index.phpとlocalhost/food/country.php)で実行しています。 'RewriteBase/food /'を追加しましたが、うまくいきません。最初の部分はまったく動作せず、2番目の部分は部分的にしか動作しません。 '/ FR'は正しくリダイレ​​クトされますが、スラッシュ、つまり/ FR /を追加すると、スタイルはページにロードされません。つまり、相対パスはもう働きません。 –

+0

それは本当です。ごめんなさい。しかし、htaccessファイルはそのサブディレクトリに置かれているので、問題があるかどうかは分かりません。 –

+1

ありがとう、これは動作します。これをベースドメイン(localhost /など)で使用する場合は、RewriteBaseとのみを削除するだけですか? –

関連する問題