我有以下。我已经使用多年的访问规则,但我需要将它们转换为在web.config文件中工作。
任何人都有线索从哪里开始?
#Set the mapfiles for the category and product pages
RewriteMap mapfile1 txt:maps/map_categories.txt
RewriteMap mapfile2 txt:maps/map_products.txt
RewriteMap lower int:tolower
#FIX the trailing slash
RewriteRule ^([^.?]+[^.?/])$ $1/ [R=301,L]
#Define the rules for the CATEGORY pages
RewriteCond %{URL} ^(?!/(cms|cms/.*)$)
RewriteCond %{URL} ^(?!/(vadmin|vadmin/.*)$)
RewriteCond %{URL} ^(?!/(bathroom-blog|bathroom-blog/.*)$)
RewriteRule ^(?:[^/]+/)?([^/.]+)/?$ product_list.asp?catid=${mapfile1:${lower:$1}}&%{QUERY_STRING} [NC,L]
#Define the rules for the PRODUCT pages
RewriteCond %{URL} ^(?!/(cms|cms/.*)$)
RewriteCond %{URL} ^(?!/(vadmin|vadmin/.*)$)
RewriteCond %{URL} ^(?!/(bathroom-blog|bathroom-blog/.*)$)
#RewriteCond %{REQUEST_FILENAME}.asp -d
#RewriteCond %{REQUEST_FILENAME}.asp -f
RewriteRule ^.+/.+/([^/.]+)/$ product_detail.asp?prodID=${mapfile2:${lower:$1}}&%{QUERY_STRING} [NC,L]
非常感谢任何帮助!
干杯,克里斯。
答案 0 :(得分:2)
我对.NET web.config
文件了解不多。我最后一次使用它们是四年前的事。因此,我首先逐步解释您的.htaccess
文件的作用。我专注于做什么而不是如何,i。例如,我不会解释像^([^.?]+
这样的许多表达方式,这些表达方式看起来像是在咒骂的漫画人物。
这是一个很长的答案,所以给自己一杯咖啡。
让我们从前三行开始。
RewriteMap mapfile1 txt:maps/map_categories.txt
RewriteMap mapfile2 txt:maps/map_products.txt
RewriteMap lower int:tolower
您的RewriteEngine on
文件中或某个主机配置中是否有.htaccess
?
RewriteMap
设置您可以在以下规则中使用的映射,如下所示:${mapfile1:argument}
。您的map_categories.txt
子目录中应该有两个文件map_products.txt
和maps
。我可以想象你的应用程序更新这些文本文件。第三个映射将大写字母转换为小写字母。
#FIX the trailing slash
RewriteRule ^([^.?]+[^.?/])$ $1/ [R=301,L]
评论是真的。假设您有http://example.com/product
,这会将重定向(HTTP 301 Moved Permanently
)转移到http://example.com/product/
。
#Define the rules for the CATEGORY pages
RewriteCond %{URL} ^(?!/(cms|cms/.*)$)
RewriteCond %{URL} ^(?!/(vadmin|vadmin/.*)$)
RewriteCond %{URL} ^(?!/(bathroom-blog|bathroom-blog/.*)$)
RewriteRule ^(?:[^/]+/)?([^/.]+)/?$ product_list.asp?catid=${mapfile1:${lower:$1}}&%{QUERY_STRING} [NC,L]
如果您的网址与以下网址完全相同:http://example.com/cms
,http://example.com/cms/
,http://example.com/cms/any_path
以及vadmin
或bathroom-blog
而不是cms
,然后使用相应的类别ID调用product_list.asp
。这些规则使用映射map_categories.txt
将名称映射到ID,并且还允许混合大小写,即使映射仅包含小写名称。
摘要:http://example.com/cms/some_category
调用类别ID为product_list.asp
的{{1}}。
some_category
这真的很奇怪。三个#Define the rules for the PRODUCT pages
RewriteCond %{URL} ^(?!/(cms|cms/.*)$)
RewriteCond %{URL} ^(?!/(vadmin|vadmin/.*)$)
RewriteCond %{URL} ^(?!/(bathroom-blog|bathroom-blog/.*)$)
#RewriteCond %{REQUEST_FILENAME}.asp -d
#RewriteCond %{REQUEST_FILENAME}.asp -f
RewriteRule ^.+/.+/([^/.]+)/$ product_detail.asp?prodID=${mapfile2:${lower:$1}}&%{QUERY_STRING} [NC,L]
条件与上面的前三个条件完全相同。如果这确实有效,那么你的前任已经使用了一些URL重写黑魔术,例如通过在成功重写(没有重定向)之后利用它,重新读取规则并再次应用于现在重写的URL。要了解更多相关信息,我需要访问您的系统。
我已经知道我没有看到所有内容:RewriteCond
,以及映射文件。
URL重写是一个很难在没有实验的情况下很难做到的主题之一。难怪在Stack Overflow上开箱即可获得工作帮助很难。问题是几乎总是需要访问所涉及的系统,因为没有一些研究实时系统就无法给出答案。
正如Apache本身所说:http://shib.ametsoc.org/manual/misc/rewriteguide.html#page-header:
Apache模块
RewriteEngine on
是一个杀手级模块,即它是一个非常复杂的模块,它提供了一种强大的URL操作方式。有了它,您几乎可以完成您曾梦寐以求的所有类型的URL操作。您必须支付的价格是接受复杂性,因为mod_rewrite
的主要缺点是它对初学者来说并不容易理解和使用。甚至Apache专家有时会发现mod_rewrite
可以提供帮助的新方面。换句话说:对于
mod_rewrite
,你要么第一次在脚下射击,再也不要再使用它了,或因为它的力量而终生爱它。 / p>
重点是我的。
答案 1 :(得分:0)
经过一个小时左右的谷歌搜索后,我发现IIS7通过其rewriteMaps函数支持mapfiles。以下两个网页为我提供了我需要的解决方案,并且我创建了一个单独的“rewritemaps.config”文件来存储ID-> URL映射。
http://www.iis.net/learn/extensions/url-rewrite-module/using-rewrite-maps-in-url-rewrite-module
http://blogs.iis.net/ruslany/archive/2010/05/19/storing-url-rewrite-mappings-in-a-separate-file.aspx
任何希望将.htaccess mapfile配置转换为web.config的人都可以使用这两个页面。