2011-01-25 131 views
0

我正在PHP(5.2.14)上使用MySQL的Apache服务器(1.3.33)上工作,并且我们的.htaccess文件产生的漂亮url出现问题。例如,www.example.com/pages/page会起作用,而www.example.com/page/this-other-page突然不起作用。如果我输入的是下划线,404会消失,但是页面的uri会以破折号存储在数据库中,所以它会返回“页面未找到”CMS错误。破坏在URL导致404错误

以下是放在破折号中的重写规则。

RewriteRule ^([a-zA-Z0-9\-\_]+)/([a-zA-Z0-9\-\_]+)/?$ page.php?module=$1&uri=$2 [L] 
RewriteRule ^([a-zA-Z0-9\-\_]+)/([a-zA-Z0-9\-\_]+)/([a-zA-Z0-9\-\_]+)/?$ page.php?module=$1&uri=$2&sec_uri=$3 [L] 
RewriteRule ^([a-zA-Z0-9\-\_]+)/([a-zA-Z0-9\-\_]+)/([a-zA-Z0-9\-\_]+)/([a-zA-Z0-9\-\_]+)/?$ page.php?module=$1&uri=$2&sec_uri=$3&tri_uri=$4 [L] 

我怀疑有不喜欢破折号的服务器上的一些配置规则,但它不是我们的服务器上。客户端在其他地方托管,他们的服务器管理员根本没有帮助。

或者是否有一个PHP配置规则,可以解决它?

+0

这可能是因为您的CMS不喜欢URL中的破折号。 – Powerlord

回答

0

据我所知,方括号内的字符不会被转义 - 请尝试使用[a-zA-Z0-9_-]代替。连字符应该是最后一个字符,否则解析器会尝试将其作为范围的一部分来对待(例如a-z)。

+0

完全修复它。非常感谢你! –