强制URL的小写 - 覆盖以前的规则

Joh*_*ord 4 apache .htaccess mod-rewrite

我继承了一个相当可怕的.htaccess文件,它充满了以前的规则.我想要做的是简单地将每个URL小写为SEO原因.目前,Google网站管理员抱怨重复的网页.例如:www.example.com/AbC1.php与www.example.com/abc1.php具有相同的内容.为了解决这个问题,我将以下几行放入我的vhosts.conf中

#Make URL's lower case
RewriteEngine On
RewriteMap lowercase int:tolower
RewriteCond \$1 [A-Z]
RewriteRule ^/(.*)$ /\${lowercase:\$1} [R=301,L]
Run Code Online (Sandbox Code Playgroud)

但由于我的.htaccess文件中的许多规则之一,此规则无法正常工作.我可以添加上述规则并确保它覆盖任何其他规则吗?

Jon*_*Lin 9

您可以将它添加到htaccess文件中的任何其他规则之上,但重写映射定义必须在您的vhost配置中,因此在vhost中:

RewriteEngine On
RewriteMap lowercase int:tolower
Run Code Online (Sandbox Code Playgroud)

在你的htaccess文件的最顶层:

RewriteCond $1 [A-Z]
RewriteRule ^(.*)$ /${lowercase:$1} [R=301,L]
Run Code Online (Sandbox Code Playgroud)

(请注意,您不需要引导斜杠)

  • @JohnCrawford哦,我知道问题是什么,你已经在条件中逃过了'$ 1`,这意味着你**字面上想要匹配`$ 1`而不是请求URI的pathinfo. (2认同)