2011-01-27 37 views
2

私の.htaccessリダイレクトに問題があります。私は名前を変更することはできません.htaccess書き換えルールの書き換え301リダイレクト

# START THE REWRITE 
RewriteEngine on 
Options -Indexes 
Options +FollowSymLinks 
RewriteCond $1 !^(index\.php|assets) 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

# 301 REDIRECTS 
Redirect 301 /oldpage.html http://www.example.com/old_page 
Redirect 301 /page.html http://www.example.com/page 
Redirect 301 /page-that-no-longer-exists.html http://www.example.com/ 

:私は(私はPHPのフレームワークを使用しています)私のURLから「?/ index.phpを」削除するために書き換えルールの両方を持っている、そして古いページからのリダイレクトも301リダイレクトいくつかのページが新しいページと一致しないので、別の書き換えルールを持つ私の.htmlファイル、およびいくつかの他の.htmlページがホームページにリダイレクトされます - したがって、301のリダイレクト。

それで、なぜなら書き換え規則のうち、最初の301リダイレクト私は.htaccessファイルの内容を並べ替える試みた

http://www.example.com/old_page?/old_page.html

代わりに

http://www.example.com/old_page

に指示します(何もしない)、書き換え後に書き換えを設定して(301の動作を停止する)、301ごとに特定の書き換え規則を書き込む(いずれも機能していない)。

私は何かが不足していると確信しています。乾杯。

+0

を試すことができます。それは事実ですか?下に質問に答えて、あなたの質問の内容だけを残して、人々がまだ助けを必要としているとは思わないようにしてください。 –

+0

@Micahel Irigoyen。 OKを完了しました。提案されたソリューションは本当に回避策に過ぎないので、私はそれを開いたままにしました。私のRewriteCondを変更することを意味するものではありませんが、私の状況に合わせてソートされます。乾杯。 –

答えて

1

OK、私はいくつかの解決策を考え出しました。

最初

は、「index.phpを?」を削除し、書き換えには適用されません

Redirect 301 /oldpage.html http://www.example.com/index.php?/old_page 

これまでの例では、リダイレクトを送信することですが、それは作業を行います。周り

第二の仕事はどんなの.phpまたは.htmlファイルを除外するために書き換え条件を編集することです:

RewriteCond $1 !^([a-zA-Z1-9\-\_/]*\.php$|assets|[a-zA-Z1-9\-\_/]*\.html$) 

これも書き換えウォンを意味し、.PHPまたは.htmlで終わるすべてのURLをexluceことあなたのフレームワークは壊れますが、あなたが離れている限り、あなたは大丈夫です。

0

問題は、次の行です。RewriteRule ^(.*)$ /index.php?/$1 [L]は、そのリライトにクエリパラメータを強制します。いくつかのホストはこのようにセットアップされています。私が特に知っているのはDreamHostです。したがって、リダイレクトされたものはすべて壊れて表示されます。

あなたは、私はあなたがここで一番下にあなた自身の質問に答えかどうかを判断しようとしているこの

RewriteRule ^dir/file.php$ http://webpage/newdir/file2.php [R=301,L]