0

我们正在从一种站点语言/CMS(coldfusion/custom)转移到另一种(PHP/Drupal),并且需要将我们的一些旧页面重定向到新页面。我可以访问 .htaccess 和 httpd.conf(和 apache2.conf),因为这是 Linode 上的 vps。

它们中的大多数不能通过正则表达式完成(它们在 URL 中包含 GUID),我们可以编写静态重定向。

这是一个例子:

  RewriteRule /show.cfm/FG3f4-30F1G/ http://www.mysite.com/john-smith [R=301]

就是这样...我已经尝试了以^开头的语法,以美元符号结尾,但似乎都不起作用。

我可能对 RewriteCond 所扮演的角色有误解——.htaccess 中已经有其他行。

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

指定 RewriteRule 后是否需要重新声明 RewriteCond?

另外——理想情况下,为了保持 .htaccess 中的清洁度,我想使用 RewriteMap,我可以在其中指定一个文本文件,并且只有两个制表符分隔的“旧 url | 新 url”列......但我可以也不能让它工作(如果它甚至适合使用)。

任何想法都会受到欢迎......

4

3 回答 3

0

正如Cags指出的那样,如果您在.htaccess文件中定义规则,则需要确保路径不包含前导斜杠。此外,您可能需要确保使用该L标志,并将重定向规则定位在 WordPress 重写部分之上,否则这两种情况最终可能会导致冲突。

例如:

RewriteRule ^/?show.cfm/FG3f4-30F1G/$ http://www.mysite.com/john-smith [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

如果要使用RewriteMap,则需要在服务器或虚拟服务器配置中定义它。通常这对大多数人来说都是一个问题,但是由于您已经表明您在 VPS 上,所以我假设您具有必要的访问权限。请注意,出于效率原因,将所有mod_rewrite指令放在那里也是有益的,因为.htaccess必须为每个请求解析 (但服务器配置仅在启动时处理)。

httpd.conf在(或等效)中定义服务器映射如下所示:

RewriteMap redirect-map txt:/full/path/to/file/pathmap.txt

然后,您将相应地修改您的规则:

RewriteRule ^/?(show\.cfm/[A-Za-z0-9-]+/)$ http://www.example.com/${redirect-map:$1} [R=301,L]

...pathmap.txt看起来像:

# Input                Replacement
show.cfm/FG3f4-30F1G/  john-smith
show.cfm/ABC12-40000/  jane-doe
...
于 2010-08-13T15:20:15.957 回答
0

对于您的第一个静态示例,您最好使用 Redirect 指令而不是 mod_rewrites RedirectRule。

RewriteCond 仅适用于直接跟随它的 RewriteRule。因此,在您的 OP 中,如果请求的 URI 不是真正的文件或目录并且它不是 favicon,则 conds 状态,然后将其重定向到 index.php

关于您尝试使用克拉但它不起作用,这可能是路径问题,确切的解决方案取决于 RewriteRule 是位于 httpd.conf 文件中还是位于 .htaccess 中。作为一般规则模式,您在 httpd.conf 中匹配的模式之前会带有正斜杠,而您在 .htaccess 文件中匹配的模式则不会。

于 2010-08-13T13:29:53.050 回答
0

如果您在“Linode”VPS 上,您还需要将虚拟主机配置文件更新为“AllowOverride None”中的“AllowOverride All”字符串。

通常,在 LInode 上,此配置文件位于“/etc/apache2/sites-enabled”目录中。如果不更改此目录中的文件,Linode 上的 Rewrite Engine 将无法工作。

于 2014-10-30T16:10:21.110 回答