使用相同的文件夹重定向“.htaccess”文件名

时间:2017-09-26 18:47:51

标签: .htaccess redirect

不久前,我重建了一个CMS上的网站。正如预期的那样,Google搜索控制台会定期提供生成404抓取错误的网址,我会使用.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的网址现在会显示为http://www.example.com/example.php/product.php

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

1 个答案:

答案 0 :(得分: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诀窍来到这一行RewriteCond %{REQUEST_FILENAME}\.php -f,它将检查是否将.php添加到此字符串中,是否真的存在于目录中?并且我们已经在root中拥有example.php,因此,它将转到最后一行,将通过上述规则的任何字符串重定向到itself.php,并确切地说明您想要的内容。

上面的代码只会在example目录中捕获root只有example的{​​{1}},但是如果想继承其他子文件夹或将此规则应用于整个网站,那么只要有字符串如果没有扩展名,则优先级将为文件,将以下代码放在主根.htaccess文件中:

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

测试此代码后,如果是,请将302更改为301为永久重定向