2016-12-29 25 views
1

動的なページは、以下のhtaccessのルールで構成されている動作していないに/index.phpからリダイレクト:は/私のサイトで

# Dynamic Pages 
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 

ので、ページが

http://example.com/?url=testpage 

から

にリダイレクトされます
http://example.com/testpage/ 

また、/index.phpを/(ルート)にリダイレクトしたいと考えています。誰かがブラウザのアドレスバーに

http://example.com/index.php 

に入ったときに、それはこれを実現するために

http://example.com/ 

に行くべき、私は以下のルール試してみました:これは正常に動作しているものの

#index.php to/
RewriteRule ^index\.php$/[R=301] 

をが、私の以前のhtaccessルールに影響しています。私は、以前の動的ページのルールが正常に動作し、このルールを削除すると、次のURL

http://example.com/testpage/ 

は自動的

http://example.com/?url=testpage 

になります。どうやってhtaccessファイルに両方のルールを矛盾なく保つことができますか?

私の完全なの.htaccessファイルは、次のとおりです。

Options +FollowSymlinks -MultiViews 

#Enable mod rewrite 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{REQUEST_FILENAME} !-d 

# Dynamic Pages 
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 

# index.php to/
RewriteRule ^index\.php$/[R=301] 

答えて

1

あなたはこれらのルールを使用することができます。

Options +FollowSymlinks -MultiViews 

#Enable mod rewrite 
RewriteEngine On 

# index.php to/
RewriteCond %{THE_REQUEST} /index\.php [NC] 
RewriteCond %{REQUEST_URI} ^(.*/)index\.php$ [NC] 
RewriteRule^%1 [L,R=301,NE] 

# Dynamic Pages 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* index.php?url=$0 [QSA,L] 

重要なのは、あなたがループを書き換える取得しないように、最初のルールでTHE_REQUESTを使用することです。ブラウザのキャッシュをクリアしてテストしてください。

+0

うわー!私はルールを理解できないのに魅力的だった。 – user5307298

+0

'THE_REQUEST'変数は、ブラウザからApacheが受け取った元のリクエストを表し、いくつかの書き換えルールの実行後に上書きされることはありません。この変数の値の例は 'GET /index.php?id=123 HTTP/1.1'です。 – anubhava

関連する問題