301重定向更改URL的错误部分

时间:2016-11-22 04:50:13

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

在我的.htaccess文件中,我有以下重定向:

Redirect 301 /About-Us http://www.example.com/about-us
Redirect 301 /About-Us/Profile http://www.example.com/about-us/profile

问题是如果输入以下地址:

www.example.com/About-Us/Profile

上面的代码将其更改为以下内容:

www.example.com/about-us/Profile

总之;它会更改URL的第一位,但不会更改第二位。我怎么能避免这个?我知道重定向整个文件夹的RedirectMatch 301 ^/folder/ /new-folder规则,但这不符合我们的需求。另外我知道大写文件夹不是好习惯。我没有建立这个网站。

2 个答案:

答案 0 :(得分:0)

想出来。您需要将$表达式添加到父文件夹的末尾,如下所示:

Redirect 301 /About-Us$ http://www.example.com/about-us  

然后所有子文件夹和文件都将正确重定向

答案 1 :(得分:0)

如果你的所有网址,或者至少那些不是文件的网址都应该是小写的,那么只需重写一次就可能会更好:

.htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule [A-Z] LC.php [NS,L]

LC.php中(大写文件名是故意的)

<?php
$u = explode('?', $_SERVER['REQUEST_URI']);
$u[0] = strtolower($_SERVER['HTTP_HOST'] . $u[0]);
header('Location: http://' . implode('?', $u), true, 301);

这具有通过不必抢占混合大小写URL的每种可能组合而更加健壮的优点。你不必使用PHP,但你明白了。