2011-10-30 19 views
0

書き換えルールを構築する際に問題が発生しています。私が書き換えたいし、最終的にリダイレクトURLは、その中に検索クエリを持っており、次のようになります。元のアドレスがありませんhtaccess書き換え/リダイレクト

http://www.mysite.com/pages.php/fruit

http://www.mysite.com/pages.php?category=fruit

私はそれをリダイレクトしたいと思いますもう存在しません。私が書き換えを構築しようとしたが、これは非常に私はそれが

RewriteEngine on 
RewriteCond %{QUERY_STRING} =category=fruit` 
RewriteRule ^pages\.php$ pages.php/fruit/ [L,R=301] 

が書き換えルールの構築を固定に何かアドバイスは素晴らしいことだ

http://www.mysite.com/home/linux123/m/mysite.com/user/htdocs/pages.php/fruit/ 

に行く仕事をしたいどのように動作していません。前もって感謝します。

+0

あなたもhtaccessファイルは必要ありません。 $ _GET ['category']の代わりに$ _SERVER ["PATH_INFO"]を使用してください。 path_infoは '/'で始まるので、substr($ _ SERVER ["PATH_INFO"]、1) – Gerben

+0

Gerbenに感謝します。私はデータを取得したり、ページをリダイレクトすることができたことに気がつきました。あなたの助言に感謝します。 – kaliok

答えて

2

URLの書き換えの仕方は、存在しないURLを取り、存在するURLを指すように書き換えることです。存在しないURLは、機能的なものではなくプレゼンテーションのものです。あなたは他の方法でそれをやっている、あなたのウェブページ上のリンクはhttp://www.mysite.com/pages.php/fruitのようになり、ユーザがそれらをクリックすると、内部ではhttp://www.mysite.com/pages.php?category=fruitのようなものに転送されるべきです。カテゴリは、英数字

^pages\.php/([A-Za-z0-9])*$ pages.php?category=$1 [NC,L] 

のために厳密にアルファベットそうであれば、書き換えルールは

^pages\.php/([A-Za-z])*$ pages.php?category=$1 [NC,L] 

だろうそれに応じて書かれなければならあなたも、このオンラインバリデータを使用して、正規表現の書き換えルールをテストすることができます。

Regex Validator

この情報がお役に立てば幸いです。..

+0

しかし、私がしたいのは私の新しいシステムを使うことです。新しいシステムはクエリ文字列を使用しません。私は非クエリのURLを使用したい。私はまた、それが有限の数のURLに固有であることを望みます - すなわち、果物、野菜、雑貨のためのもの...これの主な理由は、クエリ文字列を持つ古いURLはまだGoogleに固執していますが、新しいサイトマップを提供しました。私は古いクエリ文字列urlでインデックスされたものをキャッチし、それをリダイレクトしたいだけです。 – kaliok

+0

私が本当に知る必要があるのは、書き換え書き換えルールにLinuxのビットが含まれていないようにするためです。home/linux123/m/mysite.com/user/htdocs – kaliok

+0

RewriteRuleはUNIXパスを自動的に削除します。リライトベースの後でのみ、パーツを一致させることができます。 pages.phpの名前を、たとえばGoogleに変更するだけで、Googleから古いURLを削除する最も簡単な方法pages2.php、それに応じてhtaccessを変更します。古いURLを新しいURLにリダイレクトしたい場合は、header( "Location:http:// {$ _SERVER ['HTTP_HOST']} /pages2.php/ { $ _GET ['category'}/")、またはhtaccessを使ってください。私はまた、URLから.phpの部分を削除することをお勧めします。だから^ pages /([A-Za-z])* $ pages2.php?category = $ 1 [NC、L] – Gerben