mod重写,将旧应用的网址转换为新应用

时间:2013-10-30 00:54:58

标签: apache .htaccess mod-rewrite url-rewriting

我有一个mod重写问题需要解决,我绝不是专家。我相信我会越来越近但不太相似。

我有一个旧应用,应用的doc根位于此处 http://doma.in/PlantImages/,并使用加载特定页面 http://doma.in/PlantImages/ImageData.asp?IDN=01-002h或类似的。我需要使用mod重写来访问新的应用程序 http://doma.in/index.php?mod=media&func=view&ot=collection&tpl=tree以及使用http://doma.in/index.php?mod=media&func=display&ot=medium&slug=01-002h

的单个页面

此外,新应用程序还有一套用于处理短网址的重写规则:

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^(.*)$ - [NC,L]
RewriteRule ^(.*)$ index.php [QSA,L]

我目前拥有的是:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^IDN=$1
RewriteRule ^/PlantImages/ImageData\.asp index.php?mod=media&func=display&ot=medium&slug=$1

RewriteRule ^PlantImages/ index.php?mod=media&func=view&ot=collection&tpl=tree

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^(.*)$ - [NC,L]
RewriteRule ^(.*)$ index.php [QSA,L]

我确实接近工作,但并不完全。当第一个条件和规则被注释掉时,第二个(PlantImages /)正确地重定向。但是当没有注释掉时,第一个根本没有重定向,css被破坏了,第二个也被破坏了。

1 个答案:

答案 0 :(得分:1)

您需要在查询字符串匹配中创建捕获组,而不是反向引用:

RewriteCond %{QUERY_STRING} ^IDN=([^&]+)
RewriteRule ^/PlantImages/ImageData\.asp index.php?mod=media&func=display&ot=medium&slug=%1

然后使用%1代替$1反对引用分组。

然后你需要在第二个规则的模式中使用$

RewriteRule ^PlantImages/$ index.php?mod=media&func=view&ot=collection&tpl=tree