2017-09-20 18 views
1

を削除することはできません私は、WWWを強制し、index.phpを削除するには、このコードを使用:htaccessファイルがindex.phpを

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?id=$1 [L] 


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

RewriteCond %{HTTP_HOST} !^$ 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTPS}s ^on(s)| 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

それはCentOSのサーバー上で動作します。 Ubuntuではそうではありません。

wwwを強制することができますが、index.phpは削除されません。

また、example.orgexample.comにリダイレクトします。

答えて

0

部分は、1つのOSで動作し、他のOSでは動作しない理由はありません。以前の(間違った)リダイレクトがキャッシュされていた場合を除きます。

しかし、ディレクティブの順序が間違っています。内部リライト(フロントコントローラ)は標準リダイレクトの後に来る必要があります。そうでなければ、 "仮想URL"を要求するときに決して "強制www"または "削除index.php"しません。例えば

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteCond %{HTTP_HOST} !^$ 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTPS}s ^on(s)| 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

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

# Front controller should be after canonical redirects 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?id=$1 [L] 

も私がexample.com

にexample.orgをリダイレクトしたい上記リダイレクトする前に以下を追加します。

RewriteCond %{HTTP_HOST} ^(www\.)?example\.org [NC] 
RewriteRule^https://example.com%{REQUEST_URI} [R,L] 

をあなたは意志テストする前にブラウザのキャッシュをクリアする必要があります。

関連する問題