2017-07-25 13 views
1

index.phpをmod_rewriteで削除する回答は.htaccessにたくさんありますが、受信URLからindex.php?を削除してすべてを書き換える必要があります。つまり、/index.php?pagename.phpから/pagename.phpに変更する必要があります。index.phpを削除しますか? mod_rewriteで

別にこれらの作業のどちらか、およびURLは次のようになりとして、彼らは、index.php

1)

RewriteBase/
RewriteRule ^index.php?/(.*)$ $1 [R=301,L] 

2)

RewriteBase/
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC] 
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L] 

でもない?を削除します。example.com/?pagename.php

問題は?はregexの特殊文字なので、それが追加されていれば、それをエスケープする必要があることを理解しています。しかし、これらの作業のどちら:

1)

RewriteBase/
RewriteRule ^index.php\??/(.*)$ $1 [R=301,L] 

2)

RewriteBase/
RewriteCond %{THE_REQUEST} ^GET.*index\.php\? [NC] 
RewriteRule (.*?)index\.php\?/*(.*) /$1$2 [R=301,NE,L] 

どのように私は正しくindex.php??をエスケープするのですか?

この回答は私にとっては役に立ちません。それは?を残します:Mod_rewrite rule to remove index.php

それを超えて:2つの書き換えルールの間にはかなりの違いがありますか?

+0

ページ変数を使用し、その後example.com/?page=pagename.phpないのはなぜ? – Eric

+0

'index.php?pagename.php'は既存のリンクです。私はそれらを変更することはできません。 – BlueDogRanch

答えて

1

あなたは、サイトのルートの.htaccessにこのルールを使用することができます。

RewriteEngine On 

RewriteCond %{THE_REQUEST} \s/+(?:index\.php)?\?([^&\s]+)\s [NC] 
RewriteRule^/%1? [R=301,L] 
+1

ニース!よく働く。そして、私は 'R = 301'から見ると301リダイレクトですか? – BlueDogRanch

+0

はいいいえ – anubhava

+0

もちろん、別の問題:)サイトのほとんどは/?PageName.phpとしてインデックスが付けられていますが、アクセス可能で内部的には/index.php?PageName.phpとしてリンクされているようです。あなたのルールはまだ動作しますが、 '? 'を削除するルールの下の2番目のルールとして' RewriteCond%{THE_REQUEST} \ s/+ \?(\ S +)[NC] 'を試しましたが、 index.php。何か案は? – BlueDogRanch

関連する問題