0

mod_rewrite を使用して、.htaccess ファイルで動的 mod 書き換えルールを構成しようとしています。私はこれを理解することに非常に近づいています。次のような URL を取得しようとしています。

http://www.mysite.com/index.php?service=14&title=events
http://www.mysite.com/index.php?service=48&title=planning

これらに自動的に書き換えるには:

http://www.mysite.com/service/14/events
http://www.mysite.com/service/48/planning

これまでの私のコードは次のとおりです。

RewriteRule ^service/(.*)/(.*)$ index.php?service=$1&title=$2 [NC,L]
RewriteCond %{QUERY_STRING} ^service=$1&title=$2 [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index.php [NC]
RewriteRule ^index.php$ /service/$1/$2 [L,R=301]

たぶん最後の行に何か問題があると思いますか?私は正規表現が得意ではないので、どんな助けでも大歓迎です。編集:きれいな URL が機能することを明確にしたかっただけです。ただし、古い URL はリダイレクトされず、ブラウザーに表示されたままです。

これが簡単かどうかはわかりませんが、URL を次のようにすることができれば:

http://www.mysite.com/service/14/title/events
http://www.mysite.com/service/48/title/planning

それならそれもうまくいくでしょう。2 番目のクエリ タイトルを URL に含める必要はありませんが、そのままにしておく方が簡単であれば、大したことはありません。

編集:回答済みソリューションに貢献してくれたすべての人に感謝します。書き換えルールのためにこれを取得しました:

RewriteRule ^index/service/(.*)/(.*)/$ index.php?service=$1&title=$2

「インデックス」を追加すると、両方のクエリ文字列で機能しました。リダイレクトに関する限り、私は自分の php スクリプトを編集し、そこですべての URL リダイレクトを行いました。これははるかに簡単でした。それを指摘してくれたmkjasinskiに感謝します。

4

2 に答える 2

1

これを試して:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^service/([0-9]+?)?/([a-zA-Z\-]+?)$ index.php?service=$1&title=$2 [L,NC]

そして、私が実行した場合: http://localhost/service/12/This-is-textin $_GETin index.php:

array (size=2)
  'service' => string '12' (length=2)
  'title' => string 'This-is-text' (length=12)
于 2013-04-02T21:25:45.203 に答える