如何使用 htaccess 替换包含查询的 URL 字符串的一部分?

How to I replace a part of the URL string containing a query using htaccess?

我有一个使用 PHP 查询字符串的 URL 字符串。 我想让 URL 漂亮,但我没能正确地制定规则。

目前 URL 看起来像这样:

http://localhost/pages/map?name=Skyfall-2022

但我希望它看起来像这样:

http://localhost/pages/Skyfall-2022

这是我当前的 htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .php [NC,L]
RewriteRule ^([^\.]+)$ .html [NC,L]


RewriteRule ^pages/(.+)$ /pages/map?name=

当我尝试输入所需 URL 时,出现 500 内部错误。我不太了解正则表达式,所以如果有人可以使用更新的 .htacces

为我调整它,我将不胜感激

使用您展示的示例,请尝试遵循 htaccess 规则。

请确保在测试您的 URL 之前清除您的浏览器缓存。

RewriteEngine ON
##External redirect for url change in browser rules here...
RewriteCond %{THE_REQUEST} \s/(pages)/map/?\?name=(\S+)\s [NC]
RewriteRule ^  %1/%2? [R=301,L]

##Internal rewrite here for internal file's serving here.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/(.*)/?$  /all-maps.php?name= [QSA,L]

注意: 我有提到地图吗?在重写规则中(第二组规则写在注释中,也写在规则中),你可以用你的 php 文件名更改它,无论你必须将查询字符串传递给什么 php 文件。

NOTE2(OP 根据 OP 环境进行的修复): 调整了 1 条规则 a 位到 /all-maps.php?name= to /map.php?name= 并将 all-maps.php 向下移动一个目录,这些规则工作正常,OP 在此处的评论中提到了这一点。只是在这里分享,将来它可以帮助人们,除了上述规则之外,这是作为解决方案的一部分完成的。