关于Mod_Rewrite
想想上次你访问一些购物网站,寻找一个具体的事情你需要买。当您最终到达网页时,网址很可能如下所示:gizmo.com/latest_and_greatest/specific_gadgets/exactly_what_youre_looking_for这不是因为这个网站花时间来设置你需要购买的每一个目录,而是因为一个名为Mod_Rewrite的方便的模块。 Mod_Rewrite可让您根据需要制作自定义和简化的网址。实际上,实际的网址可能更接近于:
http://www.gizmo.com/gp/itemB004RYVI0Q/ref=as_li_ss_tl?本教程将介绍激活Mod_Rewrite,创建和使用所需的.htaccess页面,以及设置URL重写。
内容
建立
本教程中的步骤要求用户具有root权限。你可以看到如何设置了在Ubuntu 这里 ,在第3步和4。 此外,您需要在您的服务器上安装apache。如果你没有它,你可以下载它的Ubuntu使用这个命令:sudo apt-get install apache2
第1节 - 如何激活Mod_Rewrites
在我们开始生成实际的URL重写之前,我们需要激活控制它们的apache mod_rewrite模块。这很简单:sudo a2enmod rewrite该命令激活模块,或者如果已激活,则显示“模块重写已启用”
第2节 - 关于.htaccess文件:
模块激活后,您可以通过在网站目录中创建.htaccess文件来设置网址重写。 .htaccess文件是配置您的网站的详细信息的方法,而不需要更改服务器配置文件。启动文件名的时间段将使文件隐藏在文件夹中。 此外,.htaccess文件的位置很重要。该文件中的配置将影响其目录及其下的目录中的所有内容。 您可以在文本编辑器中创建.htaccess文件(确保仅将其命名为.htaccess,而不带任何其他扩展名或名称),然后通过ftp客户端将其上传到您的网站。 或者,您可以使用此命令,将example.com替换为您的站点的名称,以在终端中创建.htaccess文件。sudo nano /var/www/example.com/.htaccess
如何允许更改.htaccess文件:
要允许.htaccess文件覆盖标准网站配置,请先打开配置文件。注意:您将需要此步骤的sudo权限。sudo nano /etc/apache2/sites-available/default进入该文件后,找到以下部分,将AllowOverride的行从None更改为全部。该部分现在应该如下所示:
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory>保存并退出该文件后,重新启动apache。 .htacess文件现在将可用于您的所有网站。
sudo service apache2 restart现在,您已设置为重写网站的网址。
第3节 - 如何重写URLS
整个URL重写操作发生在.htaccess文件中。 总的来说,所有的URL重写命令遵循相同的模式:RewriteRule Pattern Substitution [OptionalFlags]这里是每个部分的简短说明:
- RewriteRule:这是您可以在您要使用的mod_rewrite指令的名称中写入的部分。
- 模式:此部分专用于使用正则表达式解释请求的网址。本教程不包括正则表达式的讨论,但你可以找到关于这个问题的一个有用的教程在这里 。
- 替换:这是包含我们要显示的信息的页面的实际网址。它可能很难记住或混淆,因为php参数或长串数字。例如。 www.cityzoo.com/animals.php?mammals=seals
- 可选标志:标志是重写规则指令末尾的标签,可以更改表达式的行为。一些常见的标志包括[F],使URL禁止,[NC],强制规则忽略大写,[R = 301]或[R = 302],控制要使用的重定向代码,[L]这是一个系列中的最后一条规则。
三个URL重写示例:
示例1:转到第A页,找到第B页: 这是网址重写的最基本的示例:网站的访问者在浏览器中键入一个网址,但被重定向到另一个网址。这里是如何设置它。 让我们继续前进,为一个网站打开两个单独的页面 - 例如,一个用于苹果(apples.html),一个用于橙色(oranges.html): 将代码复制到Apple页面:<html> <head> <title>Apples</title> </head> <body> <h1>This page is about Apples</h1> </body> </html>之后,可以做橙色的页面,替换所有的水果名称来引用合适的一个。 现在打开.htaccess文件。
sudo nano /var/www/example.com/.htaccess将以下URL重写命令添加到文件:
RewriteEngine on RewriteRule ^oranges.html$ apples.html保存并退出。 一旦所有内容到位,请访问以“/oranges.html”结尾的网站,所有显示的信息都来自“/apple.html”网站。 现在解释一下:
- ^ oranges.html:这是指页面如何启动。插入符号(^)表示字符串的开头。换句话说,如果我们想要重写的URL的页面以除了oranges(eg.navel_oranges.html)之外的任何内容开头,它将不被重写规则识别,并且不会重定向到apples.html。
- $:美元符号指的是URL的结尾。如果字符串中最后一个字符之后还有其他内容,则网页将被重写规则同样无法识别。
- apples.html:这是浏览器实际引导流量的地方。
http://example.com/results.php?products=apple它会更清楚地显示为:
http://example.com/products/apple.htaccess文件中的行如下所示:
RewriteEngine on RewriteRule ^products/([A-Za-z0-9-]+)/?$ results.php?products=$1 [NC]现在解释一下:
- ^ products:为了被捕获和重新路由,URL必须以产品开头(请记住,这只指域名后的文本)。如果它以任何其他方式开始,规则将不适用,并且URL将保持不变。
- ([A-Za-z0-9 - ] +):括号内的内容是指可以输入到URL中的任何信息。换句话说,URL将被重写以反映/ products /之后网站输入的访问者。
- +:加号表示括号中的内容可以是一个或多个字符(而不是单个字符,即字母或数字)。
- /?$:美元符号指出字符串的结尾。问号允许字符串中的最后一个字符为正斜杠(尽管它不需要它)。
- results.php?products = $ 1:$ 1表示模式中的字符串应该在哪里。换句话说,它将把从任何人在“([A-Za-z0-9 - ] +):”部分写的信息放入。过程完成后,浏览器将显示来自第二个URL的信息
- [NC]:这是短语末尾的标志,表示规则应忽略字符串中所有字符的情况。
http://example.com/results.php?products=produce&type=fruit&species=apple与网址在提供正确的内容一样有效,它对消费者来说不是很难忘记。 URL重写将允许您将URL转换为更简单和更清楚的:
http://example.com/produce/fruit/apple为了实现这一点,我们需要在.htaccess文件中添加以下行(您可以根据需要在.htaccess文件中添加多个部分):
RewriteEngine on RewriteRule ^(meat|produce|dairy)/([^/.]+)/([^/.]+)$ results.php?products=$1&type=$2&species=$3现在解释一下:
- 首先,^(插入符号)启动表达式。
- (肉类|农产品|乳制品):如果我们想限制可以输入的选项,我们可以指定我们接受的唯一值:在这种情况下是各种杂货。如果除了这3个关键字中的任何一个被键入,则不会重写URL。
- ([^ /。] +)表示除了插入符之后的字符之外,在正斜杠之间可以写入任何内容,在本例中为正斜杠或句号。
- results.php?products = $ 1&type = $ 2&species = $ 3:括号中的每个值都将被提取,然后应用于表达式替换部分中较长的URL。 $ 1表示第一个括号,$ 2,第二个,$ 3,第三个。
作者Etel Sverdlov