首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >isapi重写帮助

isapi重写帮助
EN

Stack Overflow用户
提问于 2011-07-07 18:11:31
回答 1查看 910关注 0票数 0

嗨,我有下面的isapi重写规则在IIS 6上工作。

它改写:

代码语言:javascript
复制
http://www.mysite.com/index.php?category=white-wine

至:

代码语言:javascript
复制
http://www.mysite.com/white-wine

.htaccess目录:

代码语言:javascript
复制
RewriteEngine on
RewriteBase / 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([^/]+)/?$ /?category=$1 [NC,QSA,L]

我现在试图做几乎相同的规则,但在一个文件夹更深。编辑规则在站点根目录中的同一个.htaccess文件中,我只想将上面的规则应用到根名为products的文件夹中的index.php文件中。

我想重写:

代码语言:javascript
复制
http://www.mysite.com/product/index.php?product=the-chosen-product 

至:

代码语言:javascript
复制
http://www.mysite.com/product/the-chosen-product

我试过这样做:

代码语言:javascript
复制
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([^/]+)/product/?$ /product/?product=$1 [NC,QSA,L]

虽然我在php页面上看到了大量错误,但这是行不通的:

代码语言:javascript
复制
Warning: require_once() [function.require-once]: URL file-access is disabled in the server configuration

Warning: require_once(http://www.mysite.com/myfolder/framework/library.php) [function.require-once]: failed to open stream: no suitable wrapper could be found

我最初是从第一条规则中得到这些错误的,但由于这一点现在起作用了,我想一定有可能以某种方式执行第二条规则?

另外,我将如何更改它而不是显示:

代码语言:javascript
复制
http://www.mysite.com/product/my-chosen-product 

它将显示:

代码语言:javascript
复制
http://www.mysite.com/product/my-chosen-product.htm

我对这件事很陌生。我看过许多其他的帖子,我完全搞不懂,尤其是在isapi重写的时候,我认为它与mod_rewrite的工作方式有点不同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-08 16:22:07

RE:“警告: require_once()函数.要求-一次: URL文件访问被禁用.”。

不要使用require_once(http://www.mysite.com/myfolder/framework/library.php) --这在您的服务器上是被禁止的(但是即使启用了它,也不建议这样做)。使用require_once($_SERVER['DOCUMENT_ROOT'] . '/myfolder/framework/library.php')代替。

RE:重写规则(针对产品)。用这个代替:

代码语言:javascript
复制
RewriteCond ${REQUEST_URI} !^/product/index\.php
RewriteRule ^product/([^/]+)/?$ /product/index.php?product=$1 [NC,QSA,L]

所以你的整个.htaccess应该是这样的:

代码语言:javascript
复制
RewriteEngine on
RewriteBase / 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ /index.php?category=$1 [NC,QSA,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^product/([^/]+)/?$ /product/index.php?product=$1 [NC,QSA,L]

我已经对您的规则做了一些小的更改:指定的index.php立即,否则IIS将不得不找出正确的脚本名称以后。这需要一些很小但仍然需要资源来做到这一点。

这些规则将适用于无扩展URL(例如http://www.mysite.com/product/the-chosen-product)。如果您想在这样的URL中拥有.htm扩展,您必须这样做:

( a)立即在应用程序中生成这些URL

( b)修改重写规则:将RewriteRule行替换为:

代码语言:javascript
复制
RewriteRule ^([^/]+)\.htm$ /index.php?category=$1 [NC,QSA,L]
RewriteRule ^product/([^/]+)\.htm$ /product/index.php?product=$1 [NC,QSA,L]

有了这样的更改,旧的无扩展URL(没有.htm)将不再工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6615178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档