【发布时间】: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