【问题标题】:htaccess Redirect 301 problem .. all redirects with one string fail to redirect and 404htaccess 重定向 301 问题 .. 所有带有一个字符串的重定向都无法重定向和 404
【发布时间】:2011-01-31 00:04:33
【问题描述】:

所以我移动了一个网站并尝试对所有内容进行 301 重定向,我经常这样做,所以这是一个奇怪的问题,但可能是我没有看到的愚蠢的东西。

我的所有重定向都工作正常,除了第一个字符串以“/Dining”或“/dining”开头的任何重定向都失败了。例如,此重定向工作正常-

Redirect 301 /healthfitness/teeth.cfm /healthcare/pretty-teeth

...以及 100 多个其他人。

但所有这些都失败了(比我展示的要多得多)-

Redirect 301 /Dining/diningreviews/vawines.cfm /shopping/wines-2004
Redirect 301 /Dining/diningathome/carrotcake.cfm /home-garden/carrot-cake-2003
Redirect 301 /Dining/diningathome/oldvarolls.cfm /home-garden/virginia-rolls-2003
Redirect 301 /Dining/diningathome/pumpkincake.cfm /home-garden/pumpkin-cake-2003

我的 .htaccess 文件的顶部看起来像这样-

RewriteEngine On
RewriteBase /

#uploaded files
RewriteRule ^(.*/)?files/$ index.php [L]
RewriteCond %{REQUEST_URI} !.*wp-content/plugins.*
RewriteRule ^(.*/)?files/(.*) wp-content/blogs.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteCond %{REQUEST_URI} ^.*/wp-admin$
RewriteRule ^(.+)$ $1/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule . - [L]
RewriteRule  ^([_0-9a-zA-Z-]+/)?(wp-.*) $2 [L]
RewriteRule  ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

<IfModule mod_security.c>
<Files async-upload.php>
SecFilterEngine Off
SecFilterScanPOST Off
</Files>
</IfModule>

#Everything below here are Redirect 301s

【问题讨论】:

  • httpd.apache.org/docs/1.3/mod/mod_alias.html#redirect 说“此外,URL-path 必须是完全限定的 URL,而不是相对路径,即使与 .htaccess 文件或 部分内部一起使用也是如此。”
  • 另外,在较旧的站点上,请注意以前的开发人员可能已放入 httpd.conf 或其他可能会干扰的配置文件中的重定向。

标签: .htaccess mod-rewrite redirect http-status-code-301


【解决方案1】:

重定向语句是否必须在目标中包含协议?

【讨论】:

  • 我不认为他们必须在那里。我 95% 的重定向都在这个特定网站上工作
  • httpd.apache.org/docs/1.3/mod/mod_alias.html#redirect 说“此外,URL-path 必须是完全限定的 URL,而不是相对路径,即使与 .htaccess 文件或 部分内部一起使用也是如此。”
【解决方案2】:

您必须在重定向中包含域名。

切勿在同一个文件中混合使用 mod_alias 和 mod_rewrite 指令。如果您对任何规则使用RewriteRule,则必须对所有规则使用RewriteRule(而不是RedirectRedirectMatch)。

在任何重写(使用 RewriteRule 语法)之前列出所有重定向(使用 RewriteRule 语法),否则您会无意中将重写的指针作为新 URL 暴露在网络上。

您当前使用的代码效率非常低。 .* 模式意味着您的 .htaccess 文件将为到达服务器的每个 URL 请求尝试数十万次“后退并重试”试验匹配。

特别是,

^(.\*/)? 应在两个地方替换为 ^([^/]+/)\*

^.\*/ 应替换为 ^/([^/]+/)\*

!.\*wp-content/plugins.\* 应替换为 !wp-content/plugins

^([_0-9a-zA-Z-]+/)?(.\*\\.php)$ 应替换为 ^([_0-9A-Z-]+/)?([^.]+\\.php)$ 并添加 [NC] 标志。

“向 /wp-admin 添加尾部斜杠”重定向应该是文件中的第一个规则集,并且目标 URL 应该包括协议和域名。该规则应立即遵循非 www 到 www 规范化规则。

新代码的运行速度可能会快数百倍。

【讨论】:

    猜你喜欢
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 2012-08-22
    • 1970-01-01
    相关资源
    最近更新 更多