使用.htaccess在另一个虚拟目录中创建虚拟目录会引发500内部服务器错误

时间:2015-03-26 20:17:33

标签: php apache .htaccess

我有两个PHP文件:profile.php(接受带有整数的u值)和user.profile.php。我想要完成的是:

  • profile.php?u=1应为example.com/profile/1
  • user.profile.php应该example.com/profile/1/user

user.profile.php也需要u具有的profile.php参数值。所以这就是我写的:

RewriteRule    ^profile/(\d+)?$  profile.php?u=$1 [NC,L]
RewriteRule    ^profile/(\d+)?$/users  user.profile.php?u=$1 [NC,L]

该代码的第一部分按预期工作。当我导航到example.com/profile/1时,它会显示我导航到example.com/profile.php?u=1时显示的内容。但是,该代码中的第二行会引发500 Internal Server Error。是否无法在另一个虚拟目录中创建虚拟目录?

1 个答案:

答案 0 :(得分:0)

cmorrissey告诉你的一个问题是你错过了$,并在最后一条规则上把它放错了。它应该在RewriteRule的第一个参数的末尾。试试这个代码。

RewriteRule ^profile/([^/]+)/user/?$ /user.profile.php?u=$1 [NC,L]
RewriteRule ^profile/([^/]+)/?$ /profile.php?u=$1 [NC,L]

顺便说一下,您也可以简化代码,而不是只为附加目录提供两个单独的文件。只需将用户目录设为可选。然后添加您可以检查的其他查询字符串参数。如果它在那里,则显示如果用户文件夹在URL中,您将显示的内容。例如我可以捕获(用户)文件夹(如果它在URI中),然后将其传递给ux查询字符串。然后你可以在PHP代码中检查。如果ux参数为空,则表示用户文件夹不在URI中。

RewriteRule ^profile/([^/]+)/?(user)?/?$ /profile.php?u=$1&ux=$2 [NC,L]