mod_rewrite は初めてですが、きれいな URL でサイトを修正するために最善を尽くしています。
RewriteRule を使用すると、クリーンな URl を入力して適切なページにアクセスできるようになりますが、「乱雑な」URL が使用された場合にクリーンな URL に自動的にリダイレクトされるという問題があります (これは、ユーザーが送信したリンクやコンテンツなど)
さて、私は別の .htaccess フォーラムで見つけたこのコードを持っています。ある状況では機能しますが、別の状況では機能しません。説明します:
# FORCE CLEAN URLS
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?(.*)=([^\s]+) [NC]
RewriteRule ^ %1\/%2? [R=301,L]
これは、次のようなアドレスで正常に機能します。たとえば、www.domain.com /index.php?cmd=login 自動的にwww.domain.com/cmd/loginにリダイレクトされます。
しかし、次のような複数のクエリがある場合に問題が発生します: www.domain.com/index.php?cmd=view-profile&user=bob
アドレスに最大 3 つ以上のクエリがある可能性がある場合に、そのような URL を整理する方法がわかりません。私は正規表現に完全に対応できるわけではないので、これまでのところ、コード スニペットを修正しようとしても失敗しています。
どんな助けでも大歓迎です!私はそれらを 301 リダイレクトにして、サイトが適切にインデックスされ、SEO に準拠できるようにしたいと考えています。
編集
正規表現を数時間いじった後、私は進歩しましたが、また困惑しました。
これを表現すると:
index\.php\?(.*)=([^\s]+)(&(.*)=([^\s]+))?+
$1/$2/$3/$4/$5
index.php 以降の 3 つの URL に一致します。
http://site.com/index.php?cmd=shop&cat=78
しかし、結果の出力は、それが何であるかによって異なります。これらは私の結果です:
特定の部分をオプションとして扱い、適切にグループ化する方法は確かです。