0

サブフォルダーをファイルに書き直すのに問題があります。

リダイレクトは機能しますが、最後のルールではありません。

これが私がやろうとしていることです:

domain.com/file.php?lang=fr

に書き直したい

domain.com/fr/file.php

ファイルがどのフォルダにあるかは関係ありません。

私はフランス語の 1 つの言語だけを使用しています。

RewriteCond %{QUERY_STRING} ^lang=([A-Za-z-]+)/?$ 
RewriteRule ^(.*)\.php$ %1/$1.php?  [NS,R=301,L] 
RewriteRule ^fr/(.*)\.php/?$ $1.php?lang=fr&redirect=no [QSA,L]

私の現在のhtaccessファイル:

RewriteEngine On

RewriteBase /domain.com

RewriteCond %{QUERY_STRING} (^|&)lang=([A-Za-z-]+)(/?$|&)
RewriteCond %{QUERY_STRING} !(^|&)redirect=noneed($|&)
RewriteRule ^(.*)\.php$ %1/$1.php?  [NS,R=301,L]

RewriteRule ^fr/(.*)\.php/?$ http://localhost/?$1.php?lang=fr&redirect=noneed [QSA,L]
4

3 に答える 3

0

1 番目の規則は 2 番目の規則よりも強力であるため、問題を解決するには、1 番目に 2 番目を記述する必要があります。

于 2012-07-28T16:04:53.323 に答える
0

そのようなシステムを使用しない理由:

RewriteRule ^(fr|en|es)/(accueil|home|bienvenida)/$ /index.php?lang=$1&act=index[QSA,L]
于 2012-07-28T16:05:41.433 に答える
0

RewriteBaseオプションを追加してみてください:

RewriteRule On
RewriteBase /

RewriteCond %{QUERY_STRING} ^lang=([A-Za-z-]+)/?$
RewriteRule ^(.*)\.php$ %1/$1.php?  [NS,R=301,L]

RewriteRule ^fr/(.*)\.php/?$ $1.php?lang=fr&redirect=no [QSA,L]

(または、そのオプションが必要ない場合は/、すべてのパスの先頭に a を追加します)

また、クエリ文字列を正しく処理してRewriteCondいないようです。追加のパラメーターがあると、最初のルールが失敗します。代わりにこれを行います(私はまだ考えています):

RewriteRule On
RewriteBase /

RewriteCond %{QUERY_STRING} (^|&)lang=([A-Za-z-]+)(/?$|&)
RewriteCond %{QUERY_STRING} !(^|&)redirect=noneed($|&)
RewriteRule ^(.*)\.php$ %2/$1.php?  [NS,R=301,L]

RewriteRule ^fr/(.*)\.php/?$ $1.php?lang=fr&redirect=noneed [QSA,L]

于 2012-07-28T16:06:24.580 に答える