在IIS6上使用ISAPI_rewriter的mod_rewrite问题

时间:2010-11-29 19:32:01

标签: wordpress .htaccess mod-rewrite iis-6 isapi-rewrite

我希望非IIS人可以帮助我,虽然我遇到的问题是基于运行ISAPI_Rewriter的IIS6服务器。

情况是我在IIS6上运行Wordpress,ISAPI_Rewriter被用来替代mod_rewrite并且运行正常。我的问题是,当我让它重写我的Wordpress的URL(所以我不需要index.php文件名)它显示404.经过多次搜索我发现问题是因为ASP.net的一部分(或类似的东西)将eurl.axd / [随机字符串]添加到URL的末尾,因此这被送入Wordpress请求并打破它。我设置Wordpress模板输出请求的URL,它看起来像这样:

http://www.example.com/index.php/about/eurl.axd/b552863f2d5e9841b5d8b79b44ac02e8/

我认为这是因为IIS系统中各种事物的啄食顺序,并且需要罪魁祸首来运行项目的另一部分。我宁愿继续使用ISAPI_Rewriter来提升URL,所以我想知道这个:

有没有办法让mod_rewrite在将它送到系统之前删除eurl.axd / [string]?

我的.htaccess文件目前显示为:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# The following line excludes folders from rewriting
RewriteCond %{REQUEST_URI} !^/folder-name/

RewriteRule ^/(.*)$ /$1 [NC,L]

感谢所有的帮助,我们非常感激。


编辑:根据建议调整了我的htaccess,它似乎从我进行的简短测试中运作良好。已在下面发布。

RewriteEngine on
RewriteBase /

# This is used to strip ASP.net eurl.axd bits
# from the URL so wordpress can use permalinks


# For the root
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/wp-admin/
RewriteRule ^eurl\.axd/[0-9a-f]+/$ index.php [NC,L]


# For internal permalinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/wp-admin/
RewriteRule ^(.*)/eurl\.axd/[0-9a-f]+/$ index.php/$1 [NC,L]

3 个答案:

答案 0 :(得分:1)

在你的重写列表顶部附近的这样的东西应该有效:

RewriteRule ^(.*)/eurl\.axd/[0-9a-f]+/$ /$1

答案 1 :(得分:0)

我在 IIS上的 ASP.NET 4 上运行的网站上使用以下正则表达式作为第一个规则与 Ionics Isapi重写器 6 解决由ASP.NET 4引入的breaking change引起的问题:

RewriteRule ^(.*)/eurl.axd/[a-f0-9]{32}(.*)$ $1$2

这让我再次使用无扩展名网址。

请注意,第二个组会捕获查询字符串(如果存在)并将其恢复到重写的网址。

是的,它是a feature, not a bug

答案 2 :(得分:0)

我在II6上遇到了与v4.0 ASP.Net扩展较少URL功能的类似问题,并通过ISAPI重写模块提供商找到了解决方案,不需要将其关闭。我们经历过的问题和解决方案在此处记录http://www.vanadiumtech.com/OurBlog/post/2011/08/12/Cause-of-eurlaxd.aspx