2011-12-27 31 views
0

htaccessとURL書き換え

http://www.mywebsite.com/page.php?genus=A_GENUS&species=A_SPECIES&id=12345のようなURLのリストがあります。

私は

http://www.mywebsite.com/species/A_GENUS/A_SPECIES、恒久的に以下のURLにURLのこのフォームへの訪問をリダイレクト.htaccessファイルを書きたいと思います。

手動でデータベースに各種をリストする必要はありませんか?

私はそれを調べようとしましたが、私の頭はWordPress-Custom-Post-Typeの土地にあり、私の脳は正しく機能していません。どんな助けでも大歓迎です。

EDIT:明確化

は、現在、私の.htaccessが完全に空です。私はまったく新しいCMSとこの新しいURLフォーマットを使用するために私のウェブサイトを書き直しています。古いURL形式は存在しなくなりますが、すべての情報は引き続き使用されます。

私たちはGoogle上で非常に多くの種にランクされており、そこからの訪問者がURLフォーマットが変更されても必要な情報を表示できるようにしたいと考えています。

これらの変更はまだ行われていません(まだサンドボックス環境を新しいバージョンのサイトに使用しています)。新しいバージョンでは「ライブになる」直前にURLを変更したいと思います。

EDIT 2:新しいサイトは

新しいサイトの.htaccessの内容は、その全体がこのようになります.htaccessファイル:

Garmenの答えのための
# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase /sandboxfolder/ 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /sandboxfolder/index.php [L] 
</IfModule> 

# END WordPress 

EDIT

RewriteEngine On 
RewriteBase /sandboxfolder/ 
RewriteCond %{QUERY_STRING} genus=([a-zA-Z0-9-]+)&species=([a-zA-Z0-9-]+) 
RewriteRule ^profile.php$ /species/%1/%2 [R=302] 

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase /sandboxfolder/ 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /sandboxfolder/index.php [L] 
</IfModule> 
# END WordPress 

ここで正しくRewriteBaseを使用したかどうかわかりませんが、functiには表示されませんそれの有無にかかわらず。

よろしく、

+1

あなたのhtaccessには現在何が含まれていますか?古いURLは引き続き機能しますか?新しいURLはすでに内部URLに書き換えられていますか? – Gerben

+0

申し訳ありませんGerben、私はそれに従って私の投稿を更新します。 – dunc

+1

新しいCMSはhtaccessを使用しませんか?古いサイトでリンクが作成された場合、url-parametersは常にその順番になっていますか? – Gerben

答えて

1
RewriteEngine On 
RewriteCond %{QUERY_STRING} genus=([a-zA-Z0-9-]+)&species=([a-zA-Z0-9-]+) 
RewriteRule ^page.php$ /species/%1/%2? [L,R=302] 

この1つは、クエリ文字列パラメータの非常に特定の順序を前提としています。だから警告してください。また、名前にはプレーンな文字、数字、またはダッシュのみが含まれているものとします。

テストが完了したら302から301に変更してください。 301はブラウザに積極的にキャッシュされているため、302を使用したため、デバッグが非常に困難でした。

EDIT:あなたが持っている他の書き換えルールの上にこれを追加するか、動作しません。

EDIT 2:最後に?を追加してクエースリングを除去した。そして、さらなる実行を防ぐためにLフラグ。

+0

それは私の頭の中で意味があり、完璧に見えます、私は願っています!私は今すぐ行くよ。助けてくれてありがとうGerben - いったん遊んだら、正解を得られるようにします:) – dunc

+1

こんにちはGarben。それは動作しますが、URLに追加情報を追加します: '/ species/Parasphaerichthys/lineatus?genus = Parasphaerichthys&species = lineatus&id = 1565' – dunc

+0

また、WordPressのルールよりも上で使用すると、すべて。これはWordPressが "index.php"以外のすべてのファイルをインデックスページに書き戻しているためですか?それでも、指示通りにコードを上に置いていますが、WordPressのルールは引き続き優先されています。間違った場合に備えて.htaccessを書いたやり方を示すためにオリジナルの投稿を更新します。 – dunc