我有两个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
。是否无法在另一个虚拟目录中创建虚拟目录?
答案 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]