想象一下,我有这个网站:
http://localhost/site/admin
哪里"网站"是一个IIS虚拟目录和" admin"是" site"中的一个IIS虚拟目录。虚拟目录。两个"网站"和" admin"可以这么说是单独的网站,因为一个是主网站,另一个是管理门户网站。我遇到的问题是网址的管理门户网站部分。
假设我有一个index.php,它会显示要显示的页面名称,例如:
http://localhost/site/admin/index.php?p=cats
我使用URL重写来允许上面的URL写成:
http://localhost/site/admin/cats
我刚刚使用IIS规则向导来创建这种规则:
模式:^([^/]+)/?$
行动:index.php?p={R:1}
这很好用。
但是我现在正试图访问这样的网址:
http://localhost/site/admin/cats/123
这实际上是:
http://localhost/site/admin/index.php?p=cats&id=123
我试图使用这样的模式:
^([^/]+)/([0-9]+)/?$
似乎URL工作正常,但副作用是我的所有相对路径现在都不正确。我想要的是:
http://localhost/site/admin/pages/header.php
但它最终成为:
http://localhost/site/admin/cats/pages/header.php
我认为它正在发生,因为重写后的网址有#34;猫"在" admin"之后部分,但我无法弄清楚如何正常工作。
谢谢!
答案 0 :(得分:0)
至少应该做的是确保不重写现有页面/内容(例如header.php)。此外,您应该URL编码从URL获得的部分。如果没有给它一个彻底的测试,这应该可行:
<rule name="Rewrite">
<match url="^(([^/]+)/)+([\w]+)/?([0-9]+)?$"/>
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
</conditions>
<action type="Rewrite" url="index.php?p={UrlEncode:{R:3}}&id={UrlEncode:{R:4}}"/>
</rule>