【发布时间】:2011-11-19 13:58:31
【问题描述】:
我(有时)以某种方式成功地重写了网址,但我想了解我实际在做什么的核心。
现在,每当我在浏览器的地址栏输入http://localhost/admin/shop/ 时,我希望我的htaccess 将url 重写为http://localhost/admin.php?page=shop,所以在php 中我可以理解我实际上是在处理商店页面。为此,我有:
RewriteEngine on
RewriteRule ^(.*)\$ $1.php [nc]
RewriteCond %{REQUEST_URI} ^/admin\.php/[^/]+/$
RewriteRule ^admin\.php/(.*)/$ admin\.php?pval=$1 [l,nc]
到目前为止,这有效。但我想了解为什么我的代码在执行此操作时不起作用:
###RewriteEngine on
###RewriteRule ^(.*)\$ $1.php [nc]
### note the commenting out the code above
RewriteCond %{REQUEST_URI} ^/admin/[^/]+/$
RewriteRule ^admin/(.*)/$ admin?pval=$1 [l,nc]
### note the removal of '\.php'
所以基本上,当你在地址栏输入“http://localhost/admin/shop/”时,php 的$_SERVER['REQUEST_URI'] 将准确地打印出/admin/shop/。现在,假设php的REQUEST_URI是这样的,htaccess REQUEST_URI应该是一样的吧?我真的不知道他们是否使用不同的引擎,但这对我来说是合乎逻辑的。那么,假设我是对的,为什么当我从RewriteCond 和RewriteRule 中删除“.php”时第二个示例不起作用?另外,如果我有机会打印 htaccess 的 REQUEST_URI,在上面的示例中它实际上会打印到屏幕上吗?
PS:我知道对于这种情况,我真的不需要使用 htaccess,因为我可以在 admin 文件夹中创建一个文件夹并将其命名为 shop 等等。但问题是我并没有真正的管理文件夹,因为我正在使用控制器和 admin.php 中的一个简单开关,以避免在我的应用程序中创建数百万个文件夹。这对我来说更简单。
【问题讨论】: