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

时间:2013-09-27 10:11:30

标签: 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]

但由于我的.htaccess文件中有许多规则之一,因此该规则无效。我可以添加上述规则并确保它覆盖任何其他规则吗?

2 个答案:

答案 0 :(得分:8)

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

RewriteEngine On
RewriteMap lowercase int:tolower

在你的htaccess文件的最顶层:

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

(请注意,您不需要领先斜杠)

答案 1 :(得分:1)

我不希望将其应用于现有文件和文件夹名称,因此我更改了Jon Lin's excellent solution to:的.htaccess部分

RewriteCond $1 [A-Z]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /${lowercase:$1} [R=301,L]