重写URLS的规则

时间:2015-02-18 13:56:56

标签: wordpress .htaccess mod-rewrite url-redirection

我有以下格式的2000个网址: -

http://www.example.com/home/2015/02/yet-another-page-title-goes-here.html
http://www.example.com/home/2015/01/another-page-title-goes-here.html
http://www.example.com/home/2014/12/page-title-goes-here.html

这些是来自WordPress的旧网址,当旧网站为博客帖子启用固定链接时。

我想剥离这些网址的两部分。我想删除/ home /并且我想在最后删除.html。

这意味着,如果有人关注旧链接(在Google或其他地方),他们会转到该内容的新网址。

E.g。有人试图访问旧的过期链接:

http://www.example.com/home/2015/01/another-page-title-goes-here.html

将被重定向到新链接: -

http://www.example.com/2015/01/another-page-title-goes-here

到目前为止,我已经尝试在WordPress中编辑htaccess文件了。重定向规则对我来说是新的。

我已经做过类似的事了,但它没有工作

RewriteRule ^home/(.+)\.html $

我在哪里添加此代码,如果它是正确的,在启用了永久链接的WordPress的htaccess文件中。

默认情况下,这是我的htaccess文件的内容。 w3cache也在顶部添加了一些东西。

# BEGIN W3TC Browser Cache
<IfModule mod_deflate.c>
<IfModule mod_headers.c>
Header append Vary User-Agent env=!dont-vary
</IfModule>
AddOutputFilterByType DEFLATE text/css text/x-component  application/x-javascript application/javascript text/javascript text/x-js text/html text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon application/json
<IfModule mod_mime.c>
# DEFLATE by extension
AddOutputFilter DEFLATE js css htm html xml
</IfModule>
</IfModule>
# END W3TC Browser Cache
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

任何想法都会受到重视,

更新的HTACCESS文件和代码建议:

# BEGIN W3TC Browser Cache
<IfModule mod_deflate.c>
<IfModule mod_headers.c>
Header append Vary User-Agent env=!dont-vary
</IfModule>
AddOutputFilterByType DEFLATE text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/html text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon application/json
<IfModule mod_mime.c>
# DEFLATE by extension
AddOutputFilter DEFLATE js css htm html xml
</IfModule>
</IfModule>
# END W3TC Browser Cache
RewriteEngine On
RewriteRule ^home/(.+)\.html $
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^home/(.+)\.html$ /$1 [R,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

</IfModule>
# END WordPress

2 个答案:

答案 0 :(得分:1)

RewriteRule有多个参数。在你的,你只指定了一个匹配的URI。您应该使用以下格式:

RewriteRule ^home/(.+)\.html$ $1 [R,L]

首先,我们匹配home/<everything>.html并重定向到<everything,由$1表示。

如果新规则适合您,您可以安全地将R更改为R=301以使更改成为永久性更改 - 也就是说搜索引擎和浏览器会将重定向缓存更长时间时间。没有它,你基本上说重定向是暂时的,并且它不应该被缓存。

您的.htaccess文件现在应该如下所示:

# BEGIN W3TC Browser Cache
<IfModule mod_deflate.c>
    <IfModule mod_headers.c>
        Header append Vary User-Agent env=!dont-vary
    </IfModule>
    AddOutputFilterByType DEFLATE text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/html text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon application/json
    <IfModule mod_mime.c>
        # DEFLATE by extension
        AddOutputFilter DEFLATE js css htm html xml
    </IfModule>
</IfModule>
# END W3TC Browser Cache

# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^home/(.+)\.html$ $1 [R,L]
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ index.php [L]
</IfModule>
# END Wordpress

答案 1 :(得分:0)

从@Mike窃取答案,我又打破并修复了:

对于永久性更改,请填写以下内容:

RewriteRule ^home/(.+)\.html$ /$1 [R=301,L]

行之前:

RewriteRule ^index\.php$ - [L] # this line means never redirect index.php

它应该是这样的:

RewriteEngine On
RewriteBase /
RewriteRule ^home/(.+)\.html$ /$1 [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]