有用的Mod重写

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,请按照下列步骤操作。

  1. 找到httpd.conf文件(通常你会发现它在一个名为conf ,config或这些文件的文件夹中)
  2. httpd.conf文件中取消注释行LoadModule rewrite_module modules / mod_rewrite.so (从行前移除“#”号)
  3. 还找到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的目录。 第三行添加尾部斜杠并重定向用户。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏