Expression Engine 2 301 redirect old template grou

2019-08-10 11:55发布

I thought this would be pretty simple, however I am having issues permanently redirecting an old template group to a new one.

I have www.domain.co.uk/weddings which needs to be directed to www.domain.co.uk/more-weddings.

Both template groups exist, not sure if I need to delete the old one too? Or any other settings in the template preferences?

Here's what I have been trying to use:

RedirectMatch 301 ^/weddings\$ http://www.domain.co.uk/more-weddings

I have a load more redirects which are working too, does this new one need to be placed above them?

2条回答
手持菜刀,她持情操
2楼-- · 2019-08-10 12:01

You could enable PHP in the older template (weddings/index) and place this in it:

<?php
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: http://www.domain.co.uk/more-weddings');
    exit();
?>
查看更多
仙女界的扛把子
3楼-- · 2019-08-10 12:10

When writing mod_rewrite rules, the rules get applied in the order that they appear.

In your case, you'd want your RedirectMatch to appear before any other rewrite rules — this is especially true if you're removing index.php from your ExpressionEngine URLs.

In your example, if you only want to redirect a certain directory (i.e. an ExpressionEngine template group), the following rule will do so, while allowing the rest of the site to function normally:

<IfModule mod_rewrite.c>
    RewriteEngine On

    # Redirect Only Matching Directories
    RewriteCond %{REQUEST_URI} ^/(weddings|weddings/.*)$
    RewriteRule ^(.*)$ http://www.domain.co.uk/more-weddings/$1 [R=301,L]
</IfModule>

Make sure this rule appears before your removal of index.php (example below):

<IfModule mod_rewrite.c>
    RewriteEngine On

    # Redirect Only Matching Directories
    RewriteCond %{REQUEST_URI} ^/(weddings|weddings/.*)$
    RewriteRule ^(.*)$ http://www.domain.co.uk/more-weddings/$1 [R=301,L]

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

If you want Google and other crawlers to see your content as temporarily moved (Response code 302, the default) or permanently moved (301), be sure to configure the RewriteRule Flags appropriately.

Apache mod_rewrite Cheat Sheet

查看更多
登录 后发表回答