【问题标题】:Mod-rewrites on apache: change all URLsApache上的Mod-rewrites:更改所有URL
【发布时间】:2008-09-19 18:51:08
【问题描述】:

现在我正在做这样的事情:

RewriteRule ^/?logout(/)?$ logout.php
RewriteRule ^/?config(/)?$ config.php

我更希望有一个规则可以为每个 url 做同样的事情,这样我就不必每次添加新文件时都添加它们。

另外,如果可能的话,我喜欢将“/config/new”之类的内容与“config_new.php”相匹配。我猜一些正则表达式会让我完成这个?

【问题讨论】:

    标签: regex apache mod-rewrite


    【解决方案1】:

    试试:

    重写规则 ^/?(\w+)/?$ $1.php

    $1 是括号中第一个捕获的字符串的内容。第二个斜线周围的括号不需要。

    编辑:对于另一场比赛,试试这个:

    重写规则 ^/?(\w+)/(\w+)/?$ $1_$2.php

    【讨论】:

      【解决方案2】:

      我会这样做:

      RewriteRule ^/?(logout|config|foo)/?$ $1.php
      RewriteRule ^/?(logout|config|foo)/(new|edit|delete)$ $1_$2.php
      

      我更喜欢明确列出我想要匹配的 url,这样我就不用担心静态内容或以后添加不需要重写到 php 文件的新内容。

      如果所有子 url 对所有根 url 都有效(book/newmovie/newuser/new),上述方法是可以的,但如果您想根据根操作(@987654325)有不同的子 url,则不是很好@ 没有多大意义)。您可以使用更复杂的正则表达式来处理它,或者将所有内容路由到单个 php 文件,该文件将根据 url 确定要包含和显示的文件。

      【讨论】:

        【解决方案3】:

        Mod rewrite 不能像您在问题的第二部分中那样做(可能)无限的替换。但是请查看Apache URL Rewriting Guide底部的外部重写引擎:

        外部重写引擎

        说明:

        常见问题解答:我们如何解决 FOO/BAR/QUUX/等问题。问题?使用 mod_rewrite 似乎没有解决方案...... 解决方案:

        使用外部 RewriteMap,即像 RewriteMap 一样工作的程序。它在 Apache 启动时运行一次,在 STDIN 上接收请求的 URL,并且必须将结果(通常重写)的 URL 放在 STDOUT 上(相同的顺序!)。

        RewriteEngine on
        RewriteMap    quux-map       prg:/path/to/map.quux.pl
        RewriteRule   ^/~quux/(.*)$  /~quux/${quux-map:$1}
        
        #!/path/to/perl
        
        #   disable buffered I/O which would lead
        #   to deadloops for the Apache server
        $| = 1;
        
        #   read URLs one per line from stdin and
        #   generate substitution URL on stdout
        while (<>) {
            s|^foo/|bar/|;
            print $_;
        }
        

        这是一个仅用于演示的示例,只是将所有 URL /~quux/foo/... 重写为 /~quux/bar/...。实际上你可以编写任何你喜欢的程序。但请注意,虽然普通用户也可以使用此类地图,但只有系统管理员可以定义它。

        【讨论】:

        • 哦,是的,我曾经这样做是为了支持用户名子域;)非常有趣。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-03
        • 2019-04-30
        • 1970-01-01
        • 2021-02-12
        • 2021-01-24
        • 1970-01-01
        相关资源
        最近更新 更多