Pam*_*Pam 2 apache mod-rewrite configuration
假设我的网络服务器上有以下文件系统设置:
/www/web/foo/widget.php
...
/www/app/mvc/controllers/WidgetController.php
Run Code Online (Sandbox Code Playgroud)
我需要弄清楚如何使用mod_rewrite将widget.php的页面请求(及其各自的GET/POST数据)映射到其控制器WidgetController.php.
它看起来像mod_rewrite是超级强大的,因此很复杂.是否有一种快速简便的方法让某人向我解释如何实现这一目标?我需要更改哪些文件?有人能告诉我这个"小部件"示例的示例规则吗?
谢谢!
没有什么是快捷方便的.
首先,您必须确保已安装该软件包
要使用mod_rewrite,您需要加载扩展名.通常情况下,这是通过在Apache2的全局配置inmporting的rewrite.so模块(已完成/etc/apache2/apache2.conf)
通常所有mod_rewrite指令都写在虚拟主机定义中.(大写:/etc/apache2/site-available/000default)
要为一个站点启用重写,您必须要求:
RewriteEngine On
Run Code Online (Sandbox Code Playgroud)
然后你就可以开始编写规则了.您需要编写规则的基本内容如下图所示:

(另请参阅:url重写如何工作?)
为了帮助我理解它的工作原理,请始终从服务器端(而非客户端)进行考虑.您从客户端收到一个URL.此URL具有您定义的特定格式.(例如http://blog.com/article/myarticle-about-a-certain-topic).但阿帕奇自己也无法理解这一点,所以我们需要帮助他.我们知道控制器是page.php并且可以按名称查找文章.
所以现在我们伪造一个regex从URL中提取信息.所有正则表达式都与您的域名后面的内容相匹配(这里:article/myarticle-about-a-certain-topic没有第一个/- 它可以写在最近的重写版本上)
在这里,我们需要的物品的名称:^article/(.*)$会做匹配对URL的工作article/<something>和捕捉<something>到$1.(对于字符含义,我建议你查看正则表达式的教程.这里^是字符串的开头,后面是不可见的位置.com/,和URL的结尾)
所以现在我们需要知道这个URL意味着什么的apache http://myblog.com/page.php?article=myarticle-about-a-certain-topic
这是通过使用a来实现的 RewriteRule
RewriteRule ^article/(.*)$ page.php?article=$1
Run Code Online (Sandbox Code Playgroud)
要了解高级主题,您可能只想在文章名称是通过GET方法获取时应用此规则.为此,您可以包含RewriteCond类似内容
RewriteCond %{REQUEST_METHOD} GET
Run Code Online (Sandbox Code Playgroud)
它RewriteRule在文件中的a之前,但在它之后进行测试.
如果要进行大量的重定向/重写,则必须了解标志
最常用的是[L]和[R].对这些的一点解释:
[R]要求重定向,可以调整它,就像[R=302]302是HTTP协议的重定向状态号.这将强制客户端使用重写的URL发出新请求.因此,他将在地址栏中看到重写的URL.[L]迫使apache停止处理规则.请注意,它确实意味着当前的传入URL将不再被修改,但重写的URL 将再次通过重写过程.如果你想避免循环,请记住这一点.因此,您最终得到以下指令块
RewriteEngine On
RewriteCond %{REQUEST_METHOD} GET
RewriteRule ^article/(.*)$ page.php?article=$1
Run Code Online (Sandbox Code Playgroud)
您可以在此处找到其他资源:
| 归档时间: |
|
| 查看次数: |
649 次 |
| 最近记录: |