互联网似乎是一个美丽的地方。不是吗?
对于我们自己的网站,URL http://www.bieryun.com/page/2将带您进入文章的互联网类别的第二页。尽管看起来很简单,但这并不适用。原始网址可能类似于http://www.bieryun.com/blog.php?category=internet&page=2
但是这样的网址实际上不方便记忆,因此我们使用前面提到的网址。因此,在本文中,让我们了解如何使用apache的mod_rewrite 或a2enmod 创建漂亮的URL ,就像调用它一样。
在我们开始之前,我假设你知道apache服务器是什么,并且已经使用PHP等服务器脚本语言在网站上工作。
所以我们将在apache上使用URL重写模块。它应该默认启用。如果不是,你可以删除读取行前面的#号
LoadModule rewrite_module modules / mod_rewrite.so
来自位于xampp / apache / conf中的httpd.conf 文件
对于Linux系统,以下命令将启用它 -
sudo a2enmod rewrite
在这之后,重新启动你的apache服务器。
现在我们需要创建一个名为.htaccess 的文件来完成我们的URL重写工作。因此,只需创建一个名为.htaccess 的文件并保存在根目录中即可。
你可以看到我有一个.htaccess 文件和一些其他的PHP文件。 现在让我们打开.htaccess文件并编写一个简单的重写规则。
因此,让我们假设您有一个配置文件页面,目前情况是这样的:当有人访问配置文件页面时,他们实际上访问了名为profile.php 的文件 ,URL栏显示URL为www.websitename.com/profile.php 。
为了让它在眼睛上更容易一些,如果我们可以删除.php扩展名会更好。要做到这一点,我们会写出这样的规则。
RewriteEngine On
RewriteRule ^profile/?$ profile.php [NC, L]
让我们打破这一点。
- RewriteEngine On 是在你的.htaccess 文件中写入的第一件事。这需要每个文件只在一开始写一次。这只需将URL重写为引擎开启即可。
- RewriteRule 定义了一条新规则,任何后面的规则都被认为是URL重写规则
- ^ profile /?$ profile.php 如果你有正则表达式的经验,你必须已经知道这一点。字符串'个人资料'匹配,如果匹配,则提供文件profile.php。
由于我现在在我的本地主机上,这看起来类似于 -
您可以在上面看到,当我访问我的Web浏览器上的URL localhost / profile 时,我可以访问URL localhost / profile.php 文件。所以这就是它的工作原理。
- [NC,L] 这些实际上是表示特殊含义的标志。NC表示不区分大小写它告诉Apache忽略小写字母和大写字符。所以,即使你输入localhost / PRofiLE,你也会看到相同的结果。如果您不包含NC标志,您可能会在某些情况下收到URL未找到的错误。L 标志告诉Apache,这是最后一次检查。如果这是匹配的,则不需要检查其他RewriteRule。
所以这是一个URL重写的简单例子。现在让我们说你想通过GET方法传递参数。访问某人的个人资料页面的简单获取方法URL就是
localhost/profile.php?username=john
当重写这个URL时,如果我们可以将它转换成真的很酷
localhost/profile/john
这将更容易记住,也更清洁。为了实现这一点,我们需要以get变量的形式将username参数传递给配置文件页面。
RewriteRule ^profile/([A-Za-z0-9-]+)/?$ profile.php?username=$1
语法与我们之前做过的类似,但是您可以注意到我们已经在这里通过了username参数。
([A-Za-z0-9 - ] +)意味着该字符集中的任何字符都将被接受。
profile.php?username = $ 1 意味着profile.php页面将被提供并且一个名为username的GET变量将被传递,这将在profile / 后面输入。
您可以看到get变量传递给用于显示输出的配置文件页面。
如果您想要传递更多变量,假设您想要一个类似于的URL
产品/食品/ 2
您可以使用以下Rewriterule
RewriteRule ^profile/([A-Za-z-]+)/([0-9-]+)/?$ products.php?category=?$1&page=$2
你可以看到我们添加了正斜杠和后来的另一个字符集条件。您可以在规则的右侧看到URL使用$ 1和$ 2作为GET变量,这些变量的设置优先于它们在重写URL中的外观。同样,您可以使用$ 3,$ 4等。
结论
所以我们讨论了URL重写并学习了一些技巧。这只是一个让你开始的基本教程。从apache自己的网站可以找到更全面的指南。