Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 重定向“;。htaccess&x201D;使用相同的文件夹&;文件名_.htaccess_Redirect - Fatal编程技术网

.htaccess 重定向“;。htaccess&x201D;使用相同的文件夹&;文件名

.htaccess 重定向“;。htaccess&x201D;使用相同的文件夹&;文件名,.htaccess,redirect,.htaccess,Redirect,不久前,我在CMS上重建了一个站点。正如所料,谷歌搜索控制台经常会出现产生404个爬行错误的URL,我会在.htaccess文件上使用301立即重定向到它们的新等价物 问题是我遇到了一个旧页面的URL,它看起来像这样: http://www.example.com/example Redirect 301 /example http://www.example.com/example.php 新页面现在称为http://www.example.com/example.php 但是,也有一个

不久前,我在CMS上重建了一个站点。正如所料,谷歌搜索控制台经常会出现产生404个爬行错误的URL,我会在
.htaccess
文件上使用301立即重定向到它们的新等价物

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

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

但是,也有一个名为
example
的文件夹,因此如果我添加如下重定向:

http://www.example.com/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


是否有一种方法可以成功重定向旧URL,而不必重命名文件夹
示例

请清除浏览器缓存,然后将以下代码放在主根目录
.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\u STRING
中的
RewriteCond%{REQUEST\u FILENAME}\.php-f
,它将检查是否将
.php
添加到此字符串,该文件是否真的位于目录中?我们在根目录中已经有了
example.php
,所以它将转到最后一行,将传递上述规则的任何字符串重定向到
本身.php
,这正是您想要的

上面的代码将只捕获
根目录中的
示例
,仅包含
示例
,但如果要继承其他子文件夹或将此规则应用于整个站点,因此,只要有不带扩展名的字符串,文件的优先级将为,将以下代码放在主根目录
.htaccess
文件中:

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

测试此代码后,如果正常,请将
302
更改为
301
以实现永久重定向

请清除浏览器缓存,然后将以下代码放在主根目录下
。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\u STRING
中的
RewriteCond%{REQUEST\u FILENAME}\.php-f
,它将检查是否将
.php
添加到此字符串,该文件是否真的位于目录中?我们在根目录中已经有了
example.php
,所以它将转到最后一行,将传递上述规则的任何字符串重定向到
本身.php
,这正是您想要的

上面的代码将只捕获
根目录中的
示例
,仅包含
示例
,但如果要继承其他子文件夹或将此规则应用于整个站点,因此,只要有不带扩展名的字符串,文件的优先级将为,将以下代码放在主根目录
.htaccess
文件中:

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

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

不清楚问题出在哪里。我很抱歉。有一个名为/example的页面的旧链接(只是一个页面而不是文件夹),需要重定向到/example.php。还有一个名为/example的新文件夹,因此URL现在会导致403禁止的错误。如何将此URL(以前只是一个页面)重定向到新页面/example.php,而不引起新文件夹/example的内容问题,也不必重命名所述新文件夹。您只需使用
RedirectMatch 301^/example/?$/example.php
并在清除浏览器缓存后对其进行测试。目前尚不清楚问题是,我道歉。有一个名为/example的页面的旧链接(只是一个页面而不是文件夹),需要重定向到/example.php。还有一个名为/example的新文件夹,因此URL现在会导致403禁止的错误。如何将此URL(以前只是一个页面)重定向到新页面/example.php,而不引起新文件夹/example的内容问题,也不必重命名所述新文件夹。您只需使用
RedirectMatch 301^/example/?$/example.php
并在清除浏览器缓存后对其进行测试。很高兴提供帮助,祝你一切顺利很高兴能帮助你,祝你一切顺利