【问题标题】:Replace all question mark and equal sign by slash?用斜杠替换所有问号和等号?
【发布时间】:2013-10-25 14:59:24
【问题描述】:

有没有办法用斜杠替换所有问号、'&'和等号???

目前我只是用 .html 替换 php 扩展

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)\.html$ $1.php [nc] 

现在,如果网站 url 是这个

http://www.mydomain.com/session/image-display.php?image=1&id=59

用户应该得到

http://www.mydomain.com/session/image-display.html/image/1/id/59

--已编辑---

我只需要一个示例,以便我也可以为其他页面编写它们。 还有如何重写2个或更多的重写规则??

【问题讨论】:

  • 你知道这是相反的,对吧?您必须将斜杠替换为 ?&=,具体取决于它们出现的位置。
  • 是的,当然有办法,但这可能意味着您需要为它创建自己的 apache 模块。提示:问“是否有办法”是没有用的,因为肯定有。
  • 是的,但我对此有点陌生,如果我能举个例子,我可以为整个网站写不是吗??
  • 嗯,你应该开始研究 apache mod_rewrite 手册,它有这些介绍主题。在这里询问 SO 很可能只会给你一小部分(而不是进一步解释)代码块,这些代码块大多只会误导你,因为这些快速答案没有提供理解规则所需的信息。 - 文档在这里:httpd.apache.org/docs/current/rewrite
  • 文档会做我猜...

标签: .htaccess


【解决方案1】:

根据您提供的示例,您可以使用:

RewriteRule ^session/image-display.html/image/(.*)/id/(.*) 
/session/image-display.php?image=$1&id=$2 [L]

最后的 [L] 是可选的,它告诉 Apache 如果应用了这条规则,则停止寻找其他规则

【讨论】:

  • L 如果应用了该规则并且 URI 被重写(更改),则重新进入下一轮重写。你说的那个标志可能是[END] flag,它不会进入下一轮。
  • @hakre 我在 OP 的帖子中没有看到任何重定向规则,因此 [L] 将停止应用所有进一步的规则
  • 错了。即使它停止了当前轮的所有进一步规则,它也会启动下一轮中的所有规则(因为您更改了URI)。而且也是错误的:如果是重定向,则不需要此标志,因为重定向会立即退出(就像 END 一样)。所以告诉 L 会被发现,因为它不是重定向,没有意义(从技术上讲)。我希望这能澄清一点。
  • @hakre 没有基于 OP 代码的下一轮重定向,因此在这种情况下 [L] 与 [END] 执行相同的操作。我希望这可以为您澄清,因为您似乎很困惑
【解决方案2】:

您需要更改链接,使其看起来像:

http://www.mydomain.com/session/image-display.html/image/1/id/59

然后将其添加到文档根目录的 htaccess 文件中,在您可能已经拥有的任何规则之前:

RewriteCond %{THE_REQUEST} \ /session/image-display\.php\?image=([^&]+)&id=([^&\ ]+)
RewriteRule ^ /session/image-display.html/image/%1/id/%2? [L,R=301]

RewriteRule ^session/image-display\.html/image/([^/]+)/id/([^/]+) /session/image-display.php?image=$1&id=$2 [L]

【讨论】:

    【解决方案3】:

    在 .htaccess 中试试这个:

    RewriteRule ^(.*)\.html/image/([^/]+)/id/([^/]+)$ $1.php?image=$2&id=$3 [NC]
    

    【讨论】:

    • 当然,这仅适用于这种确切的情况,不会推广到其他参数。
    【解决方案4】:

    这两条规则将在内部将/session/image-display.html/n1/v1/n2/v2/n3/v3 重写为/session/image-display.php?n3=v3&n2=v2&n1=v1

    可以有任意数量的/name/valuepairs,因为这条规则非常通用。

    # this rule will be applied as many times as there are /name/value pairs in URI
    # after /session/image-display.html
    RewriteRule ^(session/image-display\.html)/([^/]*)/([^/]*)(.*)$ /$1/$4?$2=$3 [L,QSA,NC]
    
    # this rule be applied in the last then all /name/value pairs have been converted
    # into query string
    RewriteRule ^(session/image-display)\.html/?$ /$1.php [L,NC]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 2023-01-18
      • 2013-03-02
      • 1970-01-01
      • 2017-03-28
      • 2011-09-09
      • 1970-01-01
      相关资源
      最近更新 更多