【问题标题】:Apache: How to rewrite some dynamic URLsApache:如何重写一些动态 URL
【发布时间】:2023-03-13 20:12:01
【问题描述】:

我需要在我的网站上重写一些特定的 URL,但尽管搜索了相当长的时间,但还是找不到。

需要匹配的原始url是这样的格式: http://www.example.com/gallery/?level=picture&id=49

我需要它们采用这种格式: http://www.example.com/index.php?page=gallery&level=picture&id=49

但是,该文件夹还包含一些图像文件。我需要任何直接指向图像的 URL 都被保留,并且任何 URL 都指向要重写的 php 页面。

我知道我想做什么,但不知道怎么做。基本上我需要在 .htaccess 中执行此操作:

if(url contains 'gallery/' AND filetype != bmp/jpg/png/etc){
REPLACE '/gallery/' WITH '/index.php?page=gallery&' AND append original query string variables
}

任何帮助都将不胜感激。

【问题讨论】:

  • 有人可以帮忙吗?

标签: apache .htaccess url mod-rewrite ip-address


【解决方案1】:

所以我找到了一个可以为我解决这个问题的解决方案。我现在可以在我的 .htaccess 文件中使用它。

RewriteCond %{REQUEST_URI} !\.(bmp|jpg|jpeg|png|gif)$
RewriteRule ^gallery/$ /index.php?page=gallery [R=302,QSA]

第一行(据我所知)排除列出的文件类型不受此规则影响,因为正如我最初提到的,我不希望为图像重写 URL。

第二行采用这样的 url: http://www.yoursite.com/gallery/?level=picture&id=52

并将其转换为: http://www.yoursite.com/index.php?page=gallery&level=picture&id=52

除了新的“page=gallery”变量之外,它还保留了原始查询字符串。它还会进行 302 重定向,以便用户在浏览器中看到正确的地址。

不确定这是否对任何人都有帮助,但我想既然我发帖询问,我也会发布我找到的解决方案。

【讨论】:

    【解决方案2】:

    这可能比你想要的更通用,但它也可以避免重写其他现有文件。

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule !^/gallery/(.+)$    index.php [QSA]
    

    【讨论】:

    • 当您说“但它也将避免重写其他现有文件”时,您究竟是什么意思?此外,此规则是否会匹配除图像之外的所有文件的 url?此外,它不仅需要附加原始查询字符串,还需要添加一个变量,如我的示例中所述。是否可以将代码第二行中的 index.php 更改为 index.php?page=gallery 然后附加原始查询字符串?
    猜你喜欢
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2013-01-05
    相关资源
    最近更新 更多