我想重写以下URL:
/app/12345 => /app/vv_start.php?id=12345
/app/12345/login => /app/vv_login.php?id=12345
/app/12345/settings => /app/vv_settings.php?id=12345
我到目前为止:
RewriteRule ^app/([^/]+)/login/?$ app/vv_login.php?id=$1 [L,NC,QSA]
RewriteRule ^app/([^/]+)/settings/?$ app/vv_settings.php?id=$1 [L,NC,QSA]
RewriteRule ^app/([^/]+)/?$ app/vv_start.php?id=$1 [L,NC,QSA]
最后一个规则会导致问题,因为它似乎一直都适用。删除最后一个规则时,前两个规则会正常运作,否则就无法正常运作。如何更正最后一个规则?
顺便问一下,这两个规则之间有什么区别吗?我应该使用哪一个(URL开头的斜线)?
RewriteRule ^app/([^/]+)/login/?$ app/vv_login.php?id=$1 [L,NC,QSA]
RewriteRule ^app/([^/]+)/login/?$ /app/vv_login.php?id=$1 [L,NC,QSA]
2条答案
按热度按时间q7solyqu1#
请尝试以下.htaccess规则文件请确保在测试URL之前清除浏览器缓存
对于您在路径之前关于
/
的问题:是的,这是有区别的,因为/app
意味着你有一个以它命名的挂载(就Linux/Unix而言),或者它是一个根/基位置。其中没有/
意味着你的app
可能存在如下:例如root/singh/htdocs
等。所以是的,它们都有不同的含义和目的。zphenhs42#
看起来你的
.php
文件在app/
子目录中。你可以在app/.htaccess
中使用以下代码:你问:
顺便问一下,这两个规则之间有什么区别吗?我应该使用哪一个(在url开头的斜线)?
我建议不要在内部重写规则中使用前导
/
,因为重写处理程序目标相对于当前目录。它还有一个额外的优点,即在重写处理程序目标不存在的情况下防止重写循环。