RewriteRule重写传统slu ..

时间:2013-09-16 02:00:20

标签: php regex wordpress .htaccess mod-rewrite

我正在努力更新网站,从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重写。

0 个答案:

没有答案