如何在Ubuntu 16.04上用Apache的mod_rewrite重写URL

  • A+
所属分类:Linux Linux命令行

mod_rewrite模块允许我们以更清晰的方式重写URL,将人类可读的路径翻译成对代码友好的查询字符串或基于附加条件重定向URL。本指南分为两部分。第一个设置示例网站并涵盖一个简单的重写示例。第二部分包含两个常用的重写规则的更深入的例子。

介绍

在本教程中,我们将激活并学习如何使用Apache 2的mod_rewrite模块管理URL重写。此模块允许我们以更清晰的方式重写URL,将人类可读的路径转换为对代码友好的查询字符串或基于附加条件重定向URL。 本指南分为两部分。第一个设置示例网站并涵盖了一个简单的重写示例。第二部分包含两个常用的重写规则的更深入的例子。

第1步 - 启用mod_rewrite

首先,我们需要激活mod_rewrite 。它可用,但没有启用干净的Apache 2安装。

这将激活模块或警告您模块已启用。要使这些更改生效,请重新启动Apache。

mod_rewrite现在完全启用。 在下一步中,我们将设置一个.htaccess文件,我们将用它来定义重定向的重写规则。

第2步 - 设置.htaccess

.htaccess文件允许我们在不访问服务器配置文件的情况下修改我们的重写规则。 因此, .htaccess对于您的Web应用程序的安全性至关重要。文件名前面的时间段确保文件被隐藏。 注意:可以放在.htaccess文件中的任何规则也可以直接放入服务器配置文件中。 事实上, 官方Apache文档建议使用服务器配置文件,而不是.htaccess ,因为Apache以这种方式处理它。 然而,在这个简单的例子中,性能提高可以忽略不计。此外,在.htaccess中设置规则很方便,尤其是在同一服务器上有多个网站的情况下。 它不需要服务器重新启动才能使更改生效,并且不需要root权限即可编辑这些规则,从而简化维护并使用非特权帐户进行更改。 一些流行的开源软件,如Wordpress和Joomla,通常依赖于.htaccess文件,软件可以根据需要修改和创建其他规则。 在开始之前,我们需要设置并保护一些其他设置。 默认情况下,Apache禁止使用.htaccess文件来应用重写规则,因此首先需要允许对文件进行更改。 使用nano或您喜欢的文本编辑器打开默认的Apache配置文件。

在该文件中,您会发现从第一行开始的<VirtualHost *:80>块。在该块内部,添加以下新块,以便您的配置文件如下所示。确保所有块都正确缩进。

/etc/apache2/sites-available/000-default.conf

保存并关闭文件。要使这些更改生效,请重新启动Apache。

现在,在web根目录中创建.htaccess文件。

在新文件的顶部添加此行,以激活重写引擎。

保存文件并退出。 您现在有一个可操作的.htaccess文件,您可以使用它来管理Web应用程序的路由规则。在下一步中,我们将创建示例网站文件,我们将用它来演示重写规则。

第3步 - 配置URL重写

在这里,我们将设置一个基本的URL重写,它将漂亮的URL转换为实际的代码路径。具体来说,我们将允许用户访问http:// your_server_ip /about 。 首先在web根目录中创建一个名为about.html的文件。

将以下HTML代码复制到/var/www/html/about.html文件中,然后保存并关闭它。

您可以访问http:// your_server_ip /about.html访问此网页,但请注意,如果您尝试访问http://your_server_ip /about ,您将看到404 Not Found错误。如果你希望用户简单地访问页面,重写规则将允许这个功能。 所有RewriteRules遵守以下格式:

  • RewriteRule指定指令。
  • pattern是与URL中所需的字符串匹配的正则表达式 ,这是浏览器在浏览器中键入的内容。
  • substitution是实际URL的路径,即文件Apache服务器的路径。
  • flags是可以修改规则工作原理的可选参数。

打开.htaccess文件。

在第一行之后,添加以红色标记的RewriteRule并保存文件

在这种情况下, ^about$是模式, about.html是替换,并且[NC]是标志。我们的示例使用了几个具有特殊意义的字符:

  • ^表示网址的开头,位于your_server_ip /之后。
  • $表示URL的结尾。
  • about匹配字符串“about”。
  • about.html是用户访问的实际文件。
  • [NC]是使规则不区分大小写的标志。

现在,您现在应该可以在浏览器中访问http:// your_server_ip /about 。 实际上,根据上面显示的规则,以下网址将指向about.html :

  • http:// your_server_ip /about ,因为规则定义。
  • http:// your_server_ip /About ,因为规则不区分大小写。
  • http:// your_server_ip /about.html ,因为原始的正确文件名将始终有效。

以下不会:

  • http:// your_server_ip /about/ ,因为规则明确声明在使用$字符后可能没有任何内容。
  • http:// your_server_ip /contact ,因为它不会匹配规则中的about字符串。

您现在有一个操作.htaccess文件,有一个简单的规则,您可以修改和扩展到您的需要。

weinxin
我的微信
这是我的微信扫一扫

发表评论

您必须登录才能发表评论!