301 RedirectMatch - 许多网址

时间:2015-05-22 16:30:17

标签: .htaccess redirect

我有以下htaccess代码:

Options +FollowSymLinks

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RedirectMatch 301 ^/([^-]+)-([^-]+)-([^-]+)-([^-]{2})\.html$ /$1-$2-in-$3-$4.html
RedirectMatch 301 ^/([^-]+)-([^-]+)-([^-]+)\.html$ /$1-$2-in-$3.html

# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

我正在尝试自动重定向网页以包含&#39;在&#39;根据新的URL结构。上面的两个RedirectMatch行适用于两种情况,但我需要第三种情况。

第一个RedirectMatch行适用于城市(单个名称):

domain.com/music-classes-dallas-tx.html ===&gt; domain.com/music-classes-in-dallas-tx.html

第二个RedirectMatch行适用于状态:

domain.com/music-classes-texas.html ===&gt; domain.com/music-classes-in-texas.html

我现在需要的是RedirectMatch能够处理具有2-3个单词的城市名称。例如,The Colony TX或New Orleans LA。上面的代码并没有抓住这些。

有人告诉我使用下面的内容,但它会导致重定向循环,并在URL中引入一堆内嵌。

RedirectMatch 301 ^/([^-]+)-([^-]+)-(.+)-([^-]{2})\.html$ /$1-$2-in-$3-$4.html

2 个答案:

答案 0 :(得分:3)

您可以尝试使用这些重写规则吗?这个测试了我的名字空间。并确保在尝试之前清除缓存。

git

根据这条规则,这对我有用。

RewriteRule ^([^-]+)-([^-]+)-(?!in)([^/]+)-([^-]{2})\.html$ /$1-$2-in-$3-$4.html [R=301,L]
RewriteRule ^([^-]+)-([^-]+)-(?!in)([^-]+)\.html$ /$1-$2-in-$3.html [R=301,L]

http://example.com/music-classes-dallas-tx.html

答案 1 :(得分:2)

您应该使用重写规则而不是RedirectMatch,因为您有一个具有路由规则的wordpress安装。这些可能导致重定向变得不稳定。

处理此问题的最佳方法是对“in”和重定向执行负面预测:

RewriteRule ^([^-]+)-([^-]+)-(?!in-)(.+)\.html$ /$1-$2-in-$3.html [R=301,L]