我正在努力更新网站,从Drupal转移到Wordpress MS。其中一个重大挑战是将我们所有的旧网址归谷歌索引,并让它们变得更漂亮更小。
旧结构看起来像这样:
<domain>/CA/<location_name>-superflous-data-slapped-at-the-end
通常情况下,<location_name>
包含连字符以及我们想要删除的字符。
新结构应该看起来像<domain>/<hyphen-stripped-location-name>
我们已经删除了州名缩写,超级数据,我们从我们的位置名称中删除了连字符。
为了清楚起见,无论何时请求,我都希望从旧网址中获取这些已经存在的新网址。
我有一个初学者对重写规则的理解,我的正则表达式也不是很好。我不知道从哪里开始,任何帮助非常赞赏!
好的,所以我花了几个小时的时间从头开始学习mod_rewrite,我实际上能够想出一个解决方案。以下是我们期望的一组实用网址:
/ca/chino-hills-fitness-boot-camp/
/wi/lake-country-fitness-boot-camp
/site/cheyenne-fit-body-boot-camp
/site/san-antonio-fit-body-boot-camp/
...
该列表可以继续使用大约300或400个URL,但遗留URL始终遵循以下这些模式:
这是我最终得到的.htaccess文件以及wordpress MS需要运行的规则。
<IfModule mod_rewrite.c>
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteCond %{THE_REQUEST} !fitness-boot-camp
RewriteCond %{THE_REQUEST} !fit-body-boot-camp
RewriteRule . index.php [L]
# END WordPress
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
## BEGIN FBBC
# Handle Legacy URLs
# remove excess data crap
RewriteRule ^site/(.*)-fit-body-boot-camp/?$ $1 [NC]
RewriteRule ^(.+)-fitness-boot-camp/?$ $1 [NC]
RewriteRule ^[a-zA-Z]{2}/([a-zA-Z-]+)/?$ $1 [NC]
RewriteCond $1 !(.+)fitnessbootcamp
RewriteRule ^([a-zA-Z]+)-([a-zA-Z]+)/?$ $1$2fitnessbootcamp [R=301,L]
# Don't worry about hyphens
RewriteCond $1 !(.+)fitnessbootcamp
RewriteRule ^([a-zA-Z]+)/?$ $1fitnessbootcamp [R=301,L]
# END FBBC
</IfModule>
我不确定这是否是编写规则的最佳方式,但在大多数情况下它似乎有效并且不会干扰wordpress的MS重写。