查询字符串到htaccess中的路径有点工作?
Posted
技术标签:
【中文标题】查询字符串到htaccess中的路径有点工作?【英文标题】:Query string to path in htaccess somewhat working? 【发布时间】:2022-01-18 20:29:10 【问题描述】:您好,过去 3 天我一直在使用 htaccess,似乎无法弄清楚为什么我的 htaccess 文件没有正确更改我的 url。
所以我试图将这个查询字符串 url 从 www.example.com/test/user-profile.php?id=4
变成 www.example.com/test/user-profile/4
url 中的 /test/ 不是文件,它是 public_html 主目录中的文件夹。
这是我的 htaccess 文件
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %SCRIPT_FILENAME !-d
RewriteCond %SCRIPT_FILENAME !-l
RewriteCond %QUERY_STRING ^(.*)$
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %SCRIPT_FILENAME !-d
RewriteRule ^(.*)$ /test/user-profile.php?id=$1 [L]
RewriteCond %QUERY_STRING ^id=([0-9]*)$
RewriteRule ^(.*)$ /test/user-profile/%1? [R=301,L]
到目前为止,它会转到 url www.example.com/test/user-profile/4
,但它不会加载整个页面。刚刚卡住了,感谢您抽出宝贵时间
【问题讨论】:
您的.htaccess
文件在哪里? “它没有加载整个页面” - 你到底是什么意思?
我的 .htaccess 文件位于 public_html 主文件夹中。它加载了页面,但大多数 css 不起作用,我的 application.js 文件是控制台日志记录'Uncaught SyntaxError: Unexpected token '<' application.js:1
【参考方案1】:
用你展示的样本,尝试;请尝试遵循 htaccess 规则文件。请确保在测试您的 URL 之前清除您的浏览器缓存。
RewriteEngine ON
RewriteBase /
##RewriteBase /test/
##Extrenal redirect rule.
RewriteCond %THE_REQUEST \s/(test/user-profile)\.php\?id=(\d+)\s [NC]
RewriteRule ^ %1/%2? [R=301,L]
##Internal rewrite rule.
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^([^/]*)/([^/]*)/(.*)/?$ $1/$2.php?id=$3 [QSA,L]
JS/CS 重写/重定向:
您可能需要使用 base 标签来修复您的 js 和其他相关资源。如果您使用相对路径链接 js 文件,那么该文件显然会得到 404,因为它正在寻找 URL 路径。例如,如果 URL 路径是 /file/ 而不是 file.html,那么您的相关资源将从 /file/ 加载,这不是目录而是重写的 html 文件。要解决此问题,请使您的链接成为绝对链接或使用基本标签。在您的网页标题中添加此<base href="/">
,以便您的相关链接可以从正确的位置加载。
【讨论】:
对不起,我迟到了,我错过了以前的 cmets(现已删除),但上面的重写(即RewriteRule ^([^/]*)/(.*)/?$ $1.php?id=$2 [QSA,L]
)并没有重写 URL,如这个问题。它会将/test/user-profile/4
重写为test.php?id=user-profile/4
,而不是似乎需要的test/user-profile.php?id=4
?
@MrWhite,条件选择 url test/user-profile.php?id=4
,仅根据此处的最后一个解决方案。请详细说明,以便我可以在需要时编辑解决方案,干杯。
是的,第一条规则(重定向)是可以的。这会将/test/user-profile.php?id=4
重定向到test/user-profile/4
(但RewriteBase /
也必须设置,否则重定向格式错误,因为substitution 字符串上没有斜杠前缀)。然而,第二条规则(rewrite)并没有逆转这一点,而是改写为test.php?id=user-profile/4
,正如我在上面的评论中提到的那样。
@MrWhite,哦,谢谢告知。自从 OP 出错以来,代码发生了很多变化。如果这对你来说没问题,请让我看看?欢呼以上是关于查询字符串到htaccess中的路径有点工作?的主要内容,如果未能解决你的问题,请参考以下文章
301 通过 .htaccess 将查询字符串重定向到 SEO 友好的 URL
.htaccess 规则将图像文件的直接视图重定向到页面,图像作为查询字符串传递