标签: rewritemap

在IIS7中重写地图 - 如何使匹配选项包含尾部斜杠?

我已经阅读过几个组合的前30个谷歌点击IIS rewrite map condition等等,但我找不到任何体面的文档,无论是在microsoft.com网站还是其他地方.

我在IIS7中有一堆重写映射,我想处理它们,而不管它们是否后跟一个尾部斜杠.所以www.foo.com/bar,www.foo.com/bar/两者都应该符合规则.

<rewrite>
    <rewriteMaps>
        <rewriteMap name="ShortURLs">
            <add key="/terms" value="/en-us/terms-and-conditions/"/>
            <add key="/privacy" value="/en-us/privacy-and-cookies/"/>
            <add key="/buy" value="/en-us/where-to-buy/"/>
        </rewriteMap>
    </rewriteMaps>
    <rules>
        <rule name="Short URL redirects">
            <match url="^/?(.+)/?$" />
            <conditions>
                <add input="{ShortURLs:{REQUEST_URI}}" pattern="(.+)"/>
            </conditions>
            <action type="Redirect" url="{C:1}" appendQueryString="true"/>
        </rule>
    </rules>
</rewrite>
Run Code Online (Sandbox Code Playgroud)

现在这非常有效,除了我能找到/terms/匹配重写映射中第一个键的唯一方法是复制映射,使其显示为:

<rewriteMap name="ShortURLs">
    <add key="/terms" value="/en-us/terms-and-conditions/"/>
    <add key="/privacy" value="/en-us/privacy-and-cookies/"/>
    <add key="/buy" value="/en-us/where-to-buy/"/>

    <add key="/terms/" value="/en-us/terms-and-conditions/"/>
    <add key="/privacy/" value="/en-us/privacy-and-cookies/"/>
    <add key="/buy/" value="/en-us/where-to-buy/"/>
</rewriteMap>
Run Code Online (Sandbox Code Playgroud)

考虑到我首先使用正则表达式匹配它们,这看起来非常荒谬.添加/?条件输入或条件模式似乎不起作用.

我已经看到了答案,以IIS7改写地图的正则表达式?提到正则表达式不能使用(引用在URL重写模块中使用重写映射)但是,正如我在那里评论的那样,这似乎与在该文本之前给出的具体示例相关,而不是批发"这可能永远不会起作用" …

regex iis-7 rewritemap url-rewrite-module

12
推荐指数
1
解决办法
3670
查看次数

IIS7重写地图正则表达式?

是否可以在重写映射中使用reg ex?例如:

<rewriteMap name="Redirects">
   <add key="/blah/(.*)" value="/blah/{R:1}" />
</rewriteMap>
Run Code Online (Sandbox Code Playgroud)

或者有办法处理这种方法吗?目前,我有一个规则设置匹配所有内容,然后使用重写映射映射到新的URL.我想捕获目录下的所有内容,例如资源文件(blah)...而不必手动为它们全部执行此操作.

regex iis-7 url-rewriting rewritemap

10
推荐指数
1
解决办法
4624
查看次数

如何在重写中匹配www和非www?

我有一个重写地图,其中包含要重定向的域列表.目前我必须在重写地图中列出www.foo.com和foo.com.我想知道是否有办法在同一行中对www和非www进行重写检查.

# Rewrite Map
foo.com file.php
www.foo.com file.php

# modrewrite
RewriteCond ${domainmappings:%{HTTP_HOST}} ^(.+)$ [NC]
RewriteCond %1 !^NOTFOUND$
RewriteRule ^.*$ www.domain.com/%1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)

我尝试过像(www.)%{HTTP_HOST}或^(www.)%{HTTP_HOST}之类的东西,但没有运气.

regex apache mod-rewrite rewritemap

8
推荐指数
2
解决办法
1万
查看次数

Apache mod_rewrite:在Windows机器上使用PHP脚本的RewriteMap指令

这让我疯了.我似乎无法让RewriteMap指令适用于Windows上的php脚本.以下是我的httpd.conf文件中的相关代码段:

<IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteMap router "prg:C:/dev/web/www/routing.php"
        RewriteRule (.*) ${router:$1}
</IfModule>
Run Code Online (Sandbox Code Playgroud)

我的简单php脚本如下所示:

#!C:\Program Files\PHP5.3.2\php-win.exe
<?php

set_time_limit(0); # forever program!
$keyboard = fopen("php://stdin","r");
while (1) {
        $line = trim(fgets($keyboard));
        echo "/sandbox.php?url=$line";
        echo "\n";
}
?>
Run Code Online (Sandbox Code Playgroud)

当我尝试启动Apache时,我在错误日志中获得以下行:

[错误](OS 193)%1不是有效的Win32应用程序.:mod_rewrite:无法启动RewriteMap程序C:/dev/web/www/routing.php配置失败

apache文档引用了"魔术cookie技巧"(在"外部重写程序"标题下),它应该是应该指向解释器的脚本的第一行.这是我出错的地方还是需要以不同的方式调用RewriteMap指令?

php windows apache mod-rewrite rewritemap

6
推荐指数
1
解决办法
3775
查看次数

当我在.htaccess中有RewriteMap时出错500

我有这种格式的地图文件

233 Alabama/Phenix-City/Ridgebrook
237 Alabama/Ft.-Mitchell/Riverside-Estates
Run Code Online (Sandbox Code Playgroud)

我有以下.htaccess脚本.当遇到有问题的页面时,我收到500内部服务器错误.

RewriteEngine On
RewriteBase /
Options +FollowSymLinks

RewriteMap examplemap txt:/var/www/html/site.com/key_pair.txt
RewriteRule community.php?(.*) ${examplemap:$1} [R]
Run Code Online (Sandbox Code Playgroud)

当我传递以下URL时,我希望它被重写如下.

http://example.com/community.php?comm_id=233    
Run Code Online (Sandbox Code Playgroud)

应该像这样重写

http://example.com/Alabama/Phenix-City/Ridgebrook
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

apache .htaccess url-rewriting rewritemap

5
推荐指数
1
解决办法
2366
查看次数

Apache RewriteMap用于防止直接访问文件

我试图使用RewriteMap函数的结果有条件地允许访问目录.
目的是从cookie(my_cookie)中读取时间戳并将其传递到我在httpd.conf中定义的RewriteMap(my_rewrite_map_func)(如果时间戳在时间,它是一个可以将字符串"TRUE"或"FALSE"回复到stdout的可执行文件cookie在Apache的当前时间的某个范围内).

RewriteMap my_rewrite_map_func prg:/var/www/program
Run Code Online (Sandbox Code Playgroud)

我的.htaccess文件的内容是:

RewriteEngine On
RewriteCond %{HTTP_COOKIE} my_cookie=([^;]+) [NC]
RewriteCond ${my_rewrite_map_func:%{TIME}%1|FALSE},FALSE ^([^,]+),\1 [NC]
RewriteRule ^(.*)$ / [NC,L,QSA,F]
Run Code Online (Sandbox Code Playgroud)

我可以确认程序本身正在运行,正在读取cookie,并且Apache时间戳和cookie时间戳在允许的范围内.

第二个RewriteCond上的正则表达式检查$ {my_rewrite_map_func:%{TIME}%1 | FALSE}的返回值是否为FALSE,但是,无论我将其设置为什么,RewriteRule都不会发生.

基本上,我无法确定如何评估$ {my_rewrite_map_func:%{TIME}%1 | FALSE}的值.有没有办法可以更好地提取或存储这个价值?

非常感激任何的帮助.

更新 - 解决方案: 我不确定为什么这个问题被标记为非主题,它涉及通过使用mod_rewrite调用C++程序的Apache .htaccess文件来保护PHP脚本中的html文件.

无论如何,上面的代码与两个额外的行一起使用时可以很好地处理cookie不存在的情况:

RewriteCond %{HTTP_COOKIE} !^.*my_cookie.*$ [NC]
RewriteRule ^(.*)$ / [NC,L,QSA,F]
Run Code Online (Sandbox Code Playgroud)

希望这能帮助那些在同一问题上遇到困难的人; 网络上的其他地方似乎没有什么成功.

我的具体案例涉及防止直接访问html和其他文件而不直接修改它们,或使用下载脚本.PHP代码用于生成包含指向这些文件的链接的页面,Javascript从中执行ajax调用以检索服务器的时间戳并设置cookie.将cookie中的时间戳与Apache在页面加载时的时间进行比较,如果它在一定范围内,则授予访问权限.

apache .htaccess mod-rewrite rewritemap

5
推荐指数
1
解决办法
776
查看次数

在htaccess文件中使用RewriteMap

如何在htaccess文件中使用RewriteMap指令?当我把它放在那里我得到"RewriteMap不允许在这里"错误.

我知道将此错误放入httpd.conf或virtualhost配置文件时会消失.但我想知道是否有可能把它放在htaccess中?

apache .htaccess mod-rewrite rewritemap

5
推荐指数
1
解决办法
5713
查看次数

RewriteMap无法在mod-rewrite中工作

我一直试图在我的htaccess中使用RewriteMap指令进行简单的maping,但由于某种原因我每次都会收到错误500.我的语法是.. Options + FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteMap name2id txt:nklist.txt
RewriteRule ^/name/(.*) /name_list_view.php?kid=${name2id:$1|NOTFOUND}
Run Code Online (Sandbox Code Playgroud)

在nklist.txt中:

1 David
2 Mark
3 Simon
Run Code Online (Sandbox Code Playgroud)

nklist.txt文件位于我的网站的根目录,与htaccess相同.至于我的调试告诉我htaccess无法找到nklist.txt文件,但任何帮助都会感激不尽.

.htaccess mod-rewrite rewritemap

4
推荐指数
1
解决办法
5581
查看次数

带有RewriteMap的Apache RewriteRule

我有一个RewriteMap看起来像这样:

Guide           1
Mini-Guide      2
White Paper     3
Run Code Online (Sandbox Code Playgroud)

我把它包括在Apachevia中

RewriteMap legacy txt:/var/www/site/var/rewrite_map.txt
Run Code Online (Sandbox Code Playgroud)

我想创建一个RewriteRule只允许来自左侧的值RewriteMap处于此位置的值;

RewriteRule ^/section/downloads/(${legacy})/(.*)$ /blah.php?subsection=${legacy:%1}&title=$2
Run Code Online (Sandbox Code Playgroud)

我知道我可以${legacy}在右侧使用,但我可以在左侧使用它,如果是这样,怎么样?

apache mod-rewrite rewritemap

2
推荐指数
1
解决办法
4097
查看次数