0

私は成功せずにいくつかの試みをしました。これは、「静的な動的 URL」で私が意味することに対してやりたいことです。

index.php?content=authors   => /compositori/
index.php?content=albums    => /dischi/

クエリ文字列変数の値「authors」は「compositori」になる必要があります。これで試しましたが、何もしませんでした:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^compositori/$ index.php?content=authors - [R=301,L]
</IfModule>

これは動的 URL の場合です。

index.php?content=author&c=nome-compositore => /nome-compositore/
index.php?content=author&c=nome-compositore&action=view-bio => /nome-compositore/biografia/
index.php?content=author&c=nome-compositore&action=view-albums  => /nome-compositore/dischi/
index.php?content=author&c=nome-compositore&action=view-album&a=nome-disco  => /nome-compositore/nome-disco/

次に、この URL "index.php?content=index" を、クエリ文字列パラメータなしでホームページにリダイレクトし、.com の後には何もしません。index.php?content=index => www.mydomain.com

このすべてのルールについて、mydomain.com/test/ など、このサブフォルダーに配置された htaccess を使用してサブフォルダーでも機能させる必要があります。RewriteBase で試してみましたが、何もありませんでした :/

前もって感謝します

EDIT:Davidのおかげで、これらのルールがあります:

RewriteRule ^/?$ /subfolder/index.php?content=index [L]
RewriteRule ^contatti/$ /subfolder/index.php?content=contacts [L]
RewriteRule ^compositori/$ /subfolder/index.php?content=authors [L]
RewriteRule ^dischi/$ /subfolder/index.php?content=albums [L]
RewriteRule ^(.+)/biografia/$ /subfolder/index.php?content=author&c=$1&action=view-bio [L]
RewriteRule ^(.+)/dischi/$ /subfolder/index.php?content=author&c=$1&action=view-albums [L]
RewriteRule ^(.+)/(.+)/$ /subfolder/index.php?content=author&c=$1&action=view-album&a=$2 [L]

しかし、書き換えられていないクエリ文字列 (index.php?content=authors) を URL に入力すると、コンテンツは読み込まれますが、フォーマットされていない文字列のままで、書き換えられた URL にリダイレクトされないことに気付きました。[R=301,L] を入れてみましたが、どうしようもありません。これが私の最後の課題です。

再度、感謝します

4

1 に答える 1

0

RewriteRule ^compositori/$ index.php?content=authors - [R=301,L]

これは 2 つの理由で無効です: 必要な 2 つ (-最後に追加) ではなく 3 つのルール領域があり、先頭のスラッシュがありません。また、リダイレクト ( R=301) に設定していますが、おそらく単に書き換えたいだけです。これは次のように変更する必要があります。

RewriteRule ^compositori/$ /index.php?content=authors [L]

それが機能するようになると、投稿した残りのコンバージョンも同様に機能するはずです。

次に、この URL「index.php?content=index」を、クエリ文字列パラメーターなしでホームページにリダイレクトしたい.com、index.php?content=index => www.mydomain.com の後には何もありません

「リダイレクト」という用語を使用していますが、前の例の矢印の方向に基づいて、反対方向の「書き換え」を意味する場合があるため、両方の方法で答えを示します。

ユーザーに入力www.mydomain.comしてサーバーを実際にロードさせるにはindex.php?content=index(あなたが本当に意味していると思います):

RewriteRule ^/?$ /index.php?content=index [L]

本当にindex.php?content=indexリダイレクトするにはwww.mydomain.com

RewriteCond %{QUERY_STRING} ^content=index$
RewriteRule ^index.php$ http://www.mydomain.com/ [R=301,L]

編集:クエリ文字列を含むフルパスを「きれいな」URLにリダイレクトすることに関する最後の質問については、特定の書き換えごとにすぐ上に書いたもの(RewriteCond + RewriteRule)を実装し、既存の(新しいルール。言い換えると:

RewriteCond %{QUERY_STRING} ^content=index$
RewriteRule ^subfolder/index.php$ http://www.mydomain.com/ [R=301,L]

RewriteCond %{QUERY_STRING} ^content=contacts$
RewriteRule ^subfolder/index.php$ http://www.mydomain.com/contatti/ [R=301,L]

... repeat for remaining rules

RewriteRule ^/?$ /subfolder/index.php?content=index [L]
RewriteRule ^contatti/?$ /subfolder/index.php?content=contacts [L]

... repeat for remaining rules

これにより、クエリ文字列を含む各完全な URL がプリティ URL にリダイレクトされ、プリティ URL がサイレントに完全な URL に書き換えられます。上記の新しいルールに関するいくつかの注意事項:

最初に、元の質問にはなかった各ルールに /subfolder を追加しました。サブフォルダーの有無にかかわらずルールを適用する場合に備えて、次のように末尾に疑問符を付けて括弧内にその部分を追加します。

RewriteRule ^(subfolder/)?index.php$ http://www.mydomain.com/ [R=301,L]

また、作成した新しいルールでは、一致するパスがスラッシュで終わる必要があります。スラッシュの有無にかかわらずディレクトリ パスは同等であるため、上記の例で行ったように、スラッシュの後に疑問符を追加してオプションにする必要があります ( contatti/?)。

于 2013-02-03T00:18:09.300 に答える