0

我有一个模组重写问题要解决,我绝不是专家。我相信我已经接近了,但并不完全在那里。

我有一个旧应用程序,该应用程序的文档根位于 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访问单个页面=显示&ot=中等&slug=01-002h

更重要的是,新应用程序有一套现有的处理短 URL 的重写规则:

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坏了,第二个也坏了。

4

1 回答 1

1

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

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

%1然后用而不是反向引用分组$1

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

RewriteRule ^PlantImages/$ index.php?mod=media&func=view&ot=collection&tpl=tree
于 2013-10-30T01:29:23.553 回答