查询字符串到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中的路径有点工作?的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 将查询字符串附加到内部重定向

301 通过 .htaccess 将查询字符串重定向到 SEO 友好的 URL

通过 .htaccess 替换查询字符串中的字符

.htaccess 规则将图像文件的直接视图重定向到页面,图像作为查询字符串传递

使用 .htaccess 将路径字符串作为 GET 变量重定向到主页

.htaccess 获取整个查询字符串到一个变量