1

自从我使用 Apache 已经很长时间了(长一段时间),即便如此,我并没有真正做太多的 URL 重写或类似的事情,只是简单的托管。但现在我正在尝试为重新命名为新域的小型企业拼凑一个简单的重定向。

它的设置方式是旧域的主机有一个基于 Web 控制面板的重定向到特定 URL,这是“寻找旧的我们?” 新域上的页面。所有请求都会被重定向,但它们会携带整个请求路径,这会在新站点上导致 404。

我一直在查看一些 Apache 文档和一些我可以在网上找到的示例,但我还没有完全做到。到目前为止我离开的地方是这样的:

RewriteCond %{REQUEST_URI} .*looking-for-blah.* [NC]
RewriteRule ^ http://newsite.com/looking-for-blah [L,R=301]

这个想法是,任何对looking-for-blah包含http://newsite.com/looking-for-blah. 因此,当旧主机将某人重定向到:

http://newsite.com/looking-for-blah/foo/baz

他们被新站点重定向到:

http://newsite.com/looking-for-blah

但是,它似乎没有捕获传入的请求并重定向它们。我是否遗漏了一些基本概念RewriteCond?也许有更好的方法来做到这一点,我什至没有考虑过?

编辑:这是整个 .htaccess 的当前状态:

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

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

# END WordPress

# BEGIN custom redirect
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule looking-for-icamp http://empow.me/looking-for-icamp [L,R=301]
</IfModule>
# END icamp redirect

但是做一个简单wgethttp://empow.me/looking-for-icamp/foo结果是 404 而不是所需的 301。

4

1 回答 1

2

Wordpress 默认的包罗万象的路由在到达之前会匹配您的规则,因此您的规则需要放在任何 Wordpress 重写之上。我还添加了一个RewriteCond比你的.+技巧更明确地避免循环重写的方法,这对我来说似乎有点笨拙,并且在以后的阅读中很难理解。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# BEGIN custom redirect

# This must take place before the Wordpress redirect to index.php
# Added condition to avoid circular rewrite
RewriteCond %{REQUEST_URI} !^/looking-for-icamp$ 
RewriteRule looking-for-icamp http://empow.me/looking-for-icamp [L,R=301]
# END icamp redirect

# Note - you had two identical WP blocks. I've removed one.

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

# This rule was the one blocking your custom rule earlier....
RewriteRule . /index.php [L]

# END WordPress
</IfModule>
于 2013-02-02T17:17:05.983 回答