【问题标题】:I need a mod_rewrite expression to rewrite all paths that do not have a file extension我需要一个 mod_rewrite 表达式来重写所有没有文件扩展名的路径
【发布时间】:2020-07-07 20:44:20
【问题描述】:

我想要做的是让我的主脚本 index.php 处理所有不包含文件扩展名的请求。所有其他包含文件扩展名(例如图像)的请求不应受到 mod_rewrite 的影响。

例如,我需要将以下 url 全部重写为 /index.php?req={REQUEST_URI}:
/索引/a/b/c
/索引/a/b
/索引

但忽略带有扩展名的网址。 Apache 而不是 PHP 应该处理以下网址:
/index/a/test.png
/index/a/b/c/script.js

我当前的表达式仅适用于具有单个目录的路径。

RewriteRule ^/?([a-z0-9]+)$ /index.php?req=%{REQUEST_URI} [QSA,L]

这个表达式重写了“/index”,而不是“/index/a”等等......

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: php regex linux apache mod-rewrite


    【解决方案1】:

    你可以使用:

    RewriteRule !^/.*\.([a-zA-Z0-9]){2,}$ /index.php?req=%{REQUEST_URI} [QSA,L]
    

    这会重定向^/.*\.([a-zA-Z0-9]){2,}$ 模式匹配的任何内容。该模式定义了一个以句点 \. 结尾的字符串,后跟两个或多个字母数字字符 ([a-zA-Z0-9]){2,}

    如果您知道文件扩展名的长度,您可以修改花括号中的数字;例如([a-zA-Z0-9]){1,3} 可以满足 1 到 3 个字符之间的文件扩展名

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 2010-09-16
      • 1970-01-01
      • 2016-09-09
      • 2019-09-11
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多