【问题标题】:Redirecting “.htaccess” with same folder & file name使用相同的文件夹和文件名重定向“.htaccess”
【发布时间】:2018-03-08 02:33:36
【问题描述】:

不久前,我在 CMS 上重建了一个网站。正如预期的那样,Google 搜索控制台经常会出现生成 404 抓取错误的 URL,我会立即使用 .htaccess 文件上的 301 重定向到它们的新等效项。

问题是我遇到了一个看起来像这样的旧页面的 URL:

http://www.example.com/example 

新页面现在称为http://www.example.com/example.php

但是,还有一个名为 example 的文件夹,所以如果我添加这样的重定向:

Redirect 301 /example http://www.example.com/example.php

该文件夹中的所有内容也会被重定向,因此名为 http://www.example.com/example/product.php 的 URL 现在将显示为 http://www.example.com/example.php/product.php

有没有办法成功重定向旧 URL 而无需重命名文件夹 example

【问题讨论】:

  • 目前还不清楚是什么问题。
  • 我很抱歉。有一个旧链接指向一个名为 /example 的页面(只是一个页面而不是文件夹),需要重定向到 /example.php。还有一个名为 /example 的新文件夹,因此 URL example.com/example 现在会导致 403 Forbidden 错误。如何将这个曾经只是一个页面的 URL 重定向到新页面 /example.php 而不会导致新文件夹 /example 的内容出现问题并且不必重命名所述新文件夹。
  • 你可以使用RedirectMatch 301 ^/example/?$ /example.php清除浏览器缓存后进行测试。

标签: .htaccess redirect


【解决方案1】:

请清除浏览器缓存,然后将以下代码放在主根.htaccess 文件中:

DirectorySlash Off 
RewriteEngine on 
RewriteCond %{THE_REQUEST} \s/+example [NC]
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)  /$1.php [R=302,L]

上面的代码将停止directoryslash 并使其变为off,因此没有斜杠的文件默认为目录,然后检查example 是否存在于QUERY_STRING 中,诀窍就在这一行@987654327 @,它将检查是否将.php 添加到此字符串中,该文件是否真的在目录中?并且我们已经在根目录中有example.php,所以它将转到最后一行,将通过上述规则的任何字符串重定向到itself.php,这正是您想要的。

上面的代码将仅在root 目录中捕获任何example example 但如果想继承其他子文件夹或将此规则应用于整个站点,则只要有没有扩展名的字符串,优先级将是对于文件,将以下代码放在您的主根目录.htaccess 文件中:

DirectorySlash Off 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)  /$1.php [R=302,L]

测试完这段代码,如果没问题,把302改成301为永久重定向

【讨论】:

  • 很高兴为您提供帮助,祝您一切顺利
猜你喜欢
  • 2015-10-09
  • 2020-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 2021-08-03
相关资源
最近更新 更多