Lighttpd配置,。我的查询字符串中的(点)导致404

时间:2010-10-19 05:47:23

标签: mod-rewrite symfony1 url-rewriting lighttpd

我的网站上有一个地址,如下:

http://www.example.com/lookup?q=http%3A%2F%2Fgigaom.com%2F2010%2F10%2F10%2Fangry-birds-for-windows7-phone-dont-count-on-it%2F

在这个例子中,查询字符串的'gigaom.com'部分中的点与lighttpd和我的重写规则紧密相关。我得到一个带有点的404,如果我把点拿出来没有404。我的重写规则如下。如果它有所作为,我正在使用symfony 1.4。

如果有人能够对这个问题有所了解,那将非常感激!

url.rewrite-once = (
    "^/(.*\..+)$" => "$0",
    "^/(.*)\.(.*)"    => "/index.php",
    "^/([^.]+)$"      => "/index.php/$1",
    "^/$"             => "/index.php"
  )

对于任何遇到lighttpd和symfony问题的人(我知道你在那里,因为这个问题有很多未解决的问题)我最终解决并在下面回答。

2 个答案:

答案 0 :(得分:6)

在以下帮助下进行大量调试后确定:

debug.log-request-handling = "enable"

^^当你尝试在lighttpd中调试重写规则时,这是一个救星! (它记录了我的所有内容到/var/log/lighttpd/error.log)

我已经弄清楚了。对于那些无法让symfony与lighttpd一起工作的人(包括点问题!),这里有一套有效的规则:

url.rewrite-once = (
    "^/(js|images|uploads|css|sf)/(.*)" => "$0", # we want to load these assets as is, without index.php
    "^/[a-zA-Z_-]+\.(html|txt|ico)$" => "$0", # for any static .html files you might be calling in your web root, we don't want to put the index.php controller in front of them
    "^/sf[A-z]+Plugin.*" => "$0", # don't want to mess with plugin routes
    "^/([a-z_]+)\.php(.*)\.(.*)$" => "/$1.php$2.$3", # same concept as rules below, except for other applications/environments (backend.php, backend_dev.php, etc)
    "^/([a-z_]+)\.php([^.]*)$" => "/$1.php$2", # see comment right above this one
    "^/(.*)\.(.*)$"    => "/index.php/$1.$2", # handle query strings and the dot problem!
    "^/([^.]+)$"      => "/index.php/$1", # general requests
    "^/$"             => "/index.php" # the home page
  )

如果有人遇到更多麻烦,请在此处发帖。谢谢!

答案 1 :(得分:0)

我正在使用PHP,MySQL和.htaccess文件来重写规则。只是分享,所以其他人也可以受益。

我以前的规则:

RewriteRule ^([^/\.]+)/([^/\.]+).html$ detail.php?name=$1&id=$2 [L]

正在使用此结果:http://www.sitecliff.com/Yahoo-UK/4.html

我想要网址名称而不是网址中的标题。网上冲浪之后,我发现点正如上所述引起问题。

"^/(.*)\.(.*)$"    => "/index.php/$1.$2", # handle query strings and the dot problem!

所以我把规则改为:

RewriteRule ^([^/]+)$ detail.php?url=$1 [L]

在此之后,我得到了我想要的结果:http://www.sitecliff.com/yahoo.com