不久前,我重建了一个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
?
答案 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
为永久重定向