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