【问题标题】:Query string to path in htaccess somewhat working?查询字符串到htaccess中的路径有点工作?
【发布时间】: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

标签: apache .htaccess mod-rewrite url-rewriting query-string


【解决方案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 出错以来,代码发生了很多变化。如果这对你来说没问题,请让我看看?欢呼
猜你喜欢
  • 2013-06-29
  • 2011-03-07
  • 2016-03-26
  • 2019-01-02
  • 1970-01-01
  • 2018-12-02
  • 2020-11-03
  • 1970-01-01
  • 2012-10-11
相关资源
最近更新 更多