2011-12-09 12 views
1

私はPHPサイト用のrewriteruleを書こうとしています。mod rewiteが.htaccessで動作しない

RewriteEngine On 
RewriteRule ^attorneys/([0-9]+)/?$ attorneys&pid=$1 [NC,L] 

リンクxyz.com/attorneys?pid=69xyz.com/attorneys/69作品両方:私は以下のように.htacessで書く

http://xyz.com/attorneys?pid=69よう

私のURLです。

ブラウザに最初のリンクを取得すると、ブラウザに2番目のリンクを表示する必要があることをブラウザに知らせるにはどうすればよいですか。

ありがとうございます。

答えて

2
RewriteRule ^attorneys/([0-9]+)/?$ attorneys&pid=$1 [NC,L,R=302] 
+1

これは彼の質問には答えません。 – middus

+0

作業していません...何もしないでください。 –

0

まず、私はそれをする必要はありませんあなたを言う必要があります。とにかく、私はSEOマニアックなクライアントのために過去にそれをやることを余儀なくされました。私はあなたに言う、それはエレガントな解決策ではない! attorneys PHPページの上部に

(それはindex.phpのかとディレクトリだ場合、私は知らないが、あなたはそれを知っている)、このコードを追加します。

// Get request script 
    $request = preg_split('/[\\/?&]/', $_SERVER['REQUEST_URI']); 
    $request_script = $request[1]; 

    // Check old URL 
    if ($request_script == 'attorneys') { 

     // Redirect 
     header('Location: /attorneys/' . $_GET['id']; 
     exit(); 

    } 

多分それはまさにこのようではありませんあなたのケースでは、しかし、私はあなたがメカニズムを得ることを願っています。

+0

なぜそれはmod_rewriteを使わずにPHPで行うのですか? – middus

+0

私はそれを動作させることができません。 Apacheの 'ModRewrite'設定に問題があるかどうかはわかりません。あなたが投稿した解決策は、私のブラウザに無限のループリダイレクトをさせ、 'L'フラグも使用しました。 Shahが同じ問題に直面しないことを願っています。私の解決方法も共有しています。 –

+0

Strange。ただし、最初のルールには 'R'フラグがないことに注意してください。あなたのPHPの実装と私のmod_rewriteの間に概念的な違いがあると思いますか? – middus

2

http://xyz.com/attorneys?pid=69http://xyz.com/attorneys/69にリダイレクトしますか?後に別のルール最初のルールは、トリックを行う必要があります(!):最初のルールはLフラグでマークされているので

RewriteEngine On 
RewriteRule ^attorneys/([0-9]+)/?$ attorneys&pid=$1 [NC,L] 
RewriteRule ^attorneys&pid=([0-9]+)$ attorneys/$1 [NC,L,R=301] 

は、第二は、最初に一致した場合に実行されることはありません。 (documentation of mod_rewrite flags hereを参照してください。)

+0

ありがとうmiddus、しかし、私は2番目のルールのサイトを追加するとき私は '内部サーバーのエラー'を示しています。私は何か他のことをする必要がありますか? –

0

これは簡単な質問です。 DOCUMENT_ROOTの.htaccessファイルでこのコードを試してください(既存のコードをコメントアウトしてください)。

Options +FollowSymLinks -MultiViews 
RewriteEngine on 
RewriteOptions MaxRedirects=5 

RewriteRule ^(attorneys)/([^/]+)/?$ $1?pid=$2 [NC,L] 

RewriteCond %{QUERY_STRING} ^pid=(.*)$ [NC] 
RewriteRule ^(attorneys)/?$ /$1/%1? [NC,L,R=301] 
関連する問題