Mod Rewrite的有用用法
作者:Mike Ems
在本教程中,我将要介绍什么是mod重写以及其使用的例子。 Mod rewrite是一个强大的工具,也是使您的网站更加SEO友好的最简单方式之一。
什么是Mod Rewrite?
MOD重写是可以即时重写请求的URL的apache服务器的一部分。 由于它支持无数次的规则,反过来又具有无限的附加条件条件,它是非常灵活的和重要的URL操纵机制。 它可以用于互联网用户和搜索引擎友好的URL。 这增加了数据库驱动的网站被索引的机会。
启用/安装Mod Rewrite
我们要做的第一件事是确保我们的服务器上有mod_rewrite。 默认情况下,Apache已安装mod_rewrite,但未启用。 测试服务器上是否启用了mod_rewrite的最简单方法是在测试目录(如/modrewrite-test/.htaccess)
中创建一个.htaccess文件,其中包含以下内容:
Options +FollowSymLinks
RewriteEngine On
现在尝试浏览到子目录。 有两件事可能发生:
- 没有错误Congrats mod_rewrite引擎现在启用。
- 500,内部服务器错误如果您收到此消息,那么您的服务器上未安装/启用mod_rewrite。
如果您发现服务器上没有安装mod_rewrite,请按照下列步骤操作。
- 找到
httpd.conf
文件(通常你会发现它在一个名为conf
,config或这些文件的文件夹中) - 在
httpd.conf
文件中取消注释行LoadModule rewrite_module modules / mod_rewrite.so
(从行前移除“#”号) - 还找到
ClearModuleList
的行被取消注释,然后找到并确保行添加模块mod_rewrite.c
没有注释掉。
执行这些步骤后,使用以下命令重新启动Apache服务器。
/etc/init.d/httpd restart
你现在应该已经启用了mod_rewrite。 一旦apache服务器重新启动,请务必再次测试mod_rewrite。
使用Mod Rewrite永远删除/添加WWW
许多网站的一个容易修复的问题在搜索引擎中是重复的。 在任何给定的搜索引擎中, http://www.example.com/
和http://example.com
是两个完全不同的网站。 这是一个大问题,因为您的网站中的内容被标识为重复的内容,并使您的搜索引擎排名下降。 使用我们的新朋友,mod_rewrite,我们可以评估这个问题。
在任何.htaccess文件的顶部,您需要打开Mod Rewrite。 这应该始终位于.htaccess文件的顶部。 您只需要一次转动Mod Rewrite。
RewriteEngine On
此外,您需要设置您的Rewrite Base。 这通常是.htaccess文件所在的目录。 如果您的.htaccess文件位于根文件夹中,则您的Rewrite Base将如下所示:
RewriteBase /
那么现在有两个可供选择的选项。 您可以选择始终删除www,或者始终保留。 要始终删除www(我的首选方法),请在根目录中创建一个.htaccess文件。 在该文件的内部添加以下内容:
RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
同样,如果您想始终添加www,请将以下内容添加到.htaccess文件中:
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule (.*) http://www.example.com$1 [R=301]
确保将example.com
更改为您的域。
使用Mod Rewrite清理您的URL
Mod Rewrite最受欢迎的用法是使用它来清理您网站的URL。 您可能或可能不知道,搜索引擎并不特别关心URL,其中包含很多网站的参数。 例:
http://www.example.com/index.php?p=about
利用mod_rewrite apache模块的强大功能,我们可以使这个URL更清晰。
http://www.example.com/about.html
要做到这一点,我们可以看到我们的好朋友的正则表达式。 我知道你现在真的很兴奋 为了完成上面的重写,在添加/删除www行之后,我将以下内容添加到我的.htaccess文件中。
RewriteRule ^([^/]+).html$ /index.php?p=$1 [QSA,L,NC]
让我们仔细看看这一行,以便我们真正了解它在做什么。
([^/]+)
这是正则表达式,以匹配除正斜杠之外的任何内容。 在处理重写网址时,这是最简单的方式来匹配两个正斜杠之间的任何东西。
.html
这将重写URL到.html。 这给你的php文件一个普通的.html文件的外观。
/index.php?p=$1
这是重写的一部分,它是始发位置。 每当您在第一部分中使用正则表达式匹配某个字符串时,您应该在本部分中引用它。 $ 1
引用了第一行正则表达式。 因此,分配给变量p的任何值都放置在第一个正则表达式位于该行的前半部分的位置。
如果您希望您的网址看起来像一个目录,您将使用此行而不是以前给出的那一行。
RewriteRule ^([^/]+)/?$ /index.php?p=$1 [QSA,L,NC]
这将返回URL:
http://www.example.com/about/
向您的网址添加尾随斜杠
为您的网址添加尾部斜杠的主要目的是提高服务器性能。 当尾部斜线添加到URL的末尾不以文件扩展名结尾时,它会告知服务器仅对其自身进行调用,从而减少服务器流量。
要始终向不在文件扩展名(例如http://www.example.com)
中结尾的URL添加尾部斜杠,请将以下内容添加到根目录中的.htaccess文件中。
rewriteCond $1 !/$
rewriteCond %{REQUEST_FILENAME}/ -d
rewriteRule (.+) http://www.example.com/$1/ [R=301,L]
第一行检查是否没有尾部斜杠。 如果添加了尾部斜线,则第二行将检查是否存在具有给定URL的目录。 第三行添加尾部斜杠并重定向用户。