web-dev-qa-db-ja.com

プリティURLのルールを書き換えます:「index.php?parameter」を「slug / index.html」にリダイレクトします

私の元のURLは次のとおりです。

    http://example.com/video_in.php?video_id=1

リンクを次のようにします:

   http://example.com/shaandaar/kinna_sona.html

shaandaarkinna_sonaは、データベース内のスラッグです。

これは私の.htaccessファイルです

  AddDefaultCharset utf-8
  Options +FollowSymlinks -Indexes
  RewriteEngine on 
 RewriteBase /
 RewriteCond %{REQUEST_FILENAME} -d [OR]
 RewriteCond %{REQUEST_FILENAME} -f
 RewriteRule ^ - [L]

 RewriteRule ^artist/(css|js|images)/(.*)?$/$1/$2 [L,QSA]
 RewriteRule ^artists/([^/]*)\.html$ artist_search.php?&letter=$1 [QSA,L]
 RewriteRule ^albums/([^/]*)\.html$ album_search.php?&letter=$1 [QSA,L]
 RewriteRule ^artist/([^/]*)\.html$ artist_in.php?artist_id=$1 [QSA,L]
 RewriteRule ^album/([^/]*)\.html$ album_in.php?&album_id=$1 [QSA,L]
 RewriteRule ^([^/]*)/([^/]*)\.html$ song_in.php?album_id=$1&song_id=$2   [QSA,L]
 RewriteRule ^([^/]*)/([^/]*)\.html$ video_in.php?album_id=$1&video_id=$2 [QSA,L]

すべてのリンクが動作していますaxceppt video_in.php

    What should I write in my *.htaccess* file?
2
Aman patel

リンクをhttp://example.com/shaandaar/kinna_sona.htmlにしたい

shaandaarとkinna_sonaは、私のデータベースのナメクジです。 .htaccessファイルに何を書くべきですか?

これが最良の方法です。

RewriteEngine On
RewriteRule ^([^/]+)/([^/]+)\.html$ /video_in.php?firstslug=$1&secondslug=$2 [L]

RewriteRuleでは、^が一致を開始します。これ:([^/]+)は次のように分類されます。

[^/]は、/以外のすべてに一致することを意味します。書き換えエンジンを混同しないための良い方法です。

プラスの意味は1つ以上に一致します。したがって、[^/]+は、/がない限り、任意の数の文字に一致することを意味します。

その後、すべてを括弧で囲んで、後で使用できるようにします。ブラケットの最初のセットは#1、2番目のセットは#2です。

次に、ドットを一致するリテラル文字として指定する方法のため、ドットの前にバックスラッシュを追加しました。

それからもちろんhtmlもそれに一致します。

マッチングを終了するには、$を使用します。

一致するものが見つかると、/video_in.php?firstslug=(first captured value)&secondslug=(second captured value)はバックグラウンドでロードされ、フレンドリーURLはWebブラウザーに残ります。

あなたの場合、およびURLを使用する場合、値はそれぞれshaandaarとkinna_sonaです。その後、スクリプトを使用して値を読み取ることができます。

偏執的なスタイルにしたい場合は、このスクリプトを使用して、値が正しく処理されていることを確認できます。

<?php
  print_r($_GET);
  exit();
?>

スクリプトを実行すると、名前と値のペアを含む配列が1行に1つずつ表示されます。

2
Mike

RewriteRule ^([^/]*)/([^/]*)\.html$ song_in.php?album_id=$1&song_id=$2 [QSA,L]RewriteRule ^([^/]*)/([^/]*)\.html$ video_in.php?album_id=$1&video_id=$2 [QSA,L]

最後の2つのディレクティブと競合しています。両方に同じpatternを使用しているため、これらの要求はすべてsong_in.phpに送信されます。 2番目の(video_in.php)ディレクティブは処理されません。

/shaandaar/kinna_sona.html(たとえば)が曲またはビデオのいずれかを参照する場合、URL内の曲とビデオを区別する必要があります。

0
MrWhite