【问题标题】:Rewrite rule - also when folder missing重写规则 - 当文件夹丢失时
【发布时间】:2017-02-07 19:04:28
【问题描述】:

我正在尝试使我的 PHP 脚本 url 友好。我的脚本在根目录下。

这些网址:

http://www.example.com/foo/blah
http://www.example.com/foo/bar
http://www.example.com/foo/snoopy

正在用这个重写:

RewriteRule ^foo/([0-9a-zA-Z-+]+)$ ./script.php?x=$1 [L,QSA]

这很好用,我的脚本正在将“blah”“bar”和“snoopy”以及所有内容都放入 x 参数中。

但如果我尝试这个网址:

http://www.example.com/foo

我得到一个 404。我该如何重写 script.php?x=all 呢?

另外,我有一些关于类似网址的旧请求:

http://www.example.com/foo/?oldstuff=2&oldid=55

如果 oldid 参数设置为:script.php?x=55,我该如何重写它

如果未设置 oldid 参数,我想重定向到 script.php?x=all。我不关心这里的其他参数。

仍然保留最热门的重写?

【问题讨论】:

  • 我最终得到了这似乎工作正常:RewriteEngine On RewriteCond "%{QUERY_STRING}" "(.*(?:^|&))oldid=([^&]*)&?(.*)&?$" RewriteRule "^foo/(.*)" ./script.php?x=%2 [L] RewriteRule "^foo/?$" /script.php?x=all [L] RewriteRule ^foo/?([0-9a-zA-Z-+]+)$ ./script.php?x=$1 [L]
  • 干得好!我认为第一个可以更容易写成RewriteEngine On RewriteCond "%{QUERY_STRING}" ".*(?:^|&)oldid=([^&]*)&?.*" RewriteRule "^foo/(.*)" ./script.php?x=%1 [L]

标签: url-rewriting


【解决方案1】:

对于http://www.example.com/foo,在你的模式中的斜线后面加上一个问号:

RewriteRule ^foo/?([0-9a-zA-Z-+]+)$ ./script.php?x=$1 [L]

有关查询参数,请查看http://httpd.apache.org/docs/trunk/rewrite/remapping.html#rewrite-query。手册上有例子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-12
    • 2017-07-16
    • 2012-11-22
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2016-08-16
    相关资源
    最近更新 更多