【问题标题】:.htaccess rewriterule "loop".htaccess 重写规则“循环”
【发布时间】:2014-08-29 18:42:51
【问题描述】:

我目前在我的 .htaccess 文件中有这一行,使页面的 URL 变得“漂亮”。

RewriteRule ^([A-Za-z0-9-]+)/$ /directory/?type=page&title=$1 [L]

但是,我有时有子页面(/page/sub-page/sub-page/),但这条线只支持一个级别(/page/)。

如何更改此代码以支持子页面(任意数量)并使title 变量类似于:

&title=page/sub-page/sub-page

/ 是分隔符。

我知道这肯定会有很大的帮助:

RewriteRule loop in .htaccess not working

但是,由于我对 regex 和 mod-rewrite 缺乏了解,我不知道如何让它与我已有的东西一起正常工作。

【问题讨论】:

  • 为什么要使用/_/ 而不仅仅是普通的/?为什么不在你的脚本中做这个替换,而不是试图让 mod_rewrite 做一些它不应该做的事情?
  • 正如 Jon 所写,您需要澄清&title=page/sub-page/sub-page 有什么问题?
  • @JonLin 你是对的,我还没有真正考虑清楚。然而,这个问题的解决方案是什么?

标签: regex apache .htaccess mod-rewrite


【解决方案1】:

试试这个:

AllowEncodedSlashes On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([/a-z0-9-]+)/?$ /directory/?type=page&title=$1 [NC,B,L]

不要担心A-Z,因为NC 标志。

【讨论】:

    【解决方案2】:

    在进行了一些正则表达式研究并进行了一些测试之后,这似乎是我的问题的答案:

    RewriteRule ^(([a-zA-Z0-9-]+)/(([a-zA-Z0-9-]+)\/?)+)$ /directory/?type=page&title=$1 [L]
    

    我更改了之前的代码并允许支持多个子目录。然后我将它放入一个捕获组并将该数据放入title 变量中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-16
      • 2011-02-16
      • 2019-09-16
      • 2011-03-08
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多