我有以下格式的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
答案 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]