3

以下是如何在博客上查看我的旧帖子地址:

subdomain.domain.com/view/1310/article-title/

当访问者来自谷歌的这样一个地址时,我希望它被重定向,如下所示:

http://www.domain.com/article-title/

我需要指定有关旧/第一个链接的一些详细信息:

  • 子域,是一个变量
  • view , 是一个固定词
  • 1230,可以是任何数字/id

我试过这个:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} subdomain.domain.com $ [NC]
RewriteRule ^/view/(*)/(.*)$ http://www.domain.com/$2 [R=301,L]

导致 500 大错误。

网站正在对 WordPress cms 进行裁决。

提前致谢!


在 Michael Berkowski 的回答之后添加。我目前的 wp 规则是:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
4

1 回答 1

3

500 错误是(零或更多)前面没有任何限定符的(*)结果。*您可能已经打算(.*),但您真正需要的是[^/]+让所有字符都达到下一个/

Options +FollowSymLinks
RewriteEngine On
# Slight modification of the subdomain - must escape .
RewriteCond %{HTTP_HOST} subdomain\.domain\.com$ [NC]
# Note this may need to be ^view/ instead of ^/view
# In htaccess context the leading / should probably not be there
RewriteRule ^/view/([^/]+)/(.*)$ http://www.domain.com/$2 [R=301,L]

上面专门针对subdomain.domain.com,但由于您指定它是可变的,因此使用它来获取所有子域,除了www.domain.com

Options +FollowSymLinks
RewriteEngine On
# Matches all subdomains except www.
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteRule ^/view/([^/]+)/(.*)$ http://www.domain.com/$2 [R=301,L]

如果做不到这一点,请发布您可能拥有的任何其他重写规则(因为您提到这是 WordPress 我希望您有其他规则),因为订单可能很重要。

更新合并 WordPress 规则:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# The new rules handle the subdomain redirect...
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteRule ^view/([^/]+)/(.*)$ http://www.domain.com/$2 [R=301,L]

# After which WordPress does its internal redirection
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
于 2013-02-22T21:10:56.233 回答