如何在子文件夹.htaccess中将URL目录设为index参数?JS获取异常
问题原因与解决方案
原因分析
你当前的.htaccess规则属于内部重写:服务器在后台悄悄把/mysubfolder/hi的请求转发给/mysubfolder/index.php?p=hi,但浏览器地址栏的URL不会发生任何变化,仍然显示mydomain.com/mysubfolder/hi。
前端JS的window.location.search读取的是浏览器地址栏里的查询字符串(也就是?后面的部分),这里是空的,所以拿不到p参数;而PHP的$_REQUEST['p']是从服务器内部传递的请求参数中读取,所以能正常获取。
解决方案
方案1:保持美观URL,前端从路径提取参数
不需要修改.htaccess,直接修改JS代码,从URL路径中提取最后一段作为参数:
// 从URL路径提取最后一个目录名作为p参数 const pathSegments = window.location.pathname.split('/').filter(segment => segment.trim() !== ''); const URL_p = pathSegments.pop(); // 得到"hi"
方案2:修改重写规则,让地址栏显示带参数的URL(外部跳转)
如果可以接受地址栏变为mydomain.com/mysubfolder/?p=hi,可以给RewriteRule加上R标记(默认临时跳转302,永久跳转用R=301):
RewriteEngine on RewriteRule ^([^/]+)/?$ index.php?p=$1 [L,R]
注意:这种方式会改变用户看到的URL,可能不符合你最初“无URL跳转”的需求,优先推荐方案1。
内容的提问来源于stack exchange,提问作者Extrange planet
相关产品推荐
相关产品推荐

