2016-04-15 20 views
1

ウェブサイトで表現エンジンを使用しています。下のコードを使って簡単な301のリダイレクトを追加しようとしています。htaccess redirect古いurlを新しいURLに追加する

Redirect 301 /contact-us/ http://www.website.co.uk/get-in-touch 

これは次のURLを返します。

http://www.website.co.uk/get-in-touch?contact-us 

私はこれをやっている理由がわかりません。

RewriteRule ^/contact-us/$ http://www.website.co.uk/get-in-touch [R=301] 
RedirectMatch 301 ^/contact-us/?$ http://www.website.co.uk/get-in-touch 

両方とも同じ結果を返します.htaccessは全体として返します。

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # Removes index.php from ExpressionEngine URLs 
    RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php?/$1 [L] 

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

</IfModule> 

RewriteRule ^/contact-us/$ http://www.website.co.uk/get-in-touch [R=301] 
#RedirectMatch 301 ^/contact-us/?$ http://www.website.co.uk/get-in-touch 
#Redirect 301 /contact-us/ http://www.website.co.uk/get-in-touch 

答えて

1

最初のRewriteRuleがあなたを騙しているようです。

シンプルなスイッチで順番に修正する必要があります。私の一般的な経験則:外部からのリダイレクト、内部からの2番目のリライト。だからあなたの場合

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # Redirect /contact-us to /get-in-touch 
    RewriteRule ^contact-us(/?)$ /get-in-touch [L,R=301] 

    # Removes index.php from ExpressionEngine URLs 
    RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php?/$1 [L] 

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

</IfModule> 
+0

これをしようと、301のリダイレクトがキャッシュされるため、ブラウザの開発ツールを開き、キャッシュを無効にするように注意してください。 –

+1

助けてくれてありがとう、完璧に働いた! –

関連する問題