如何使用 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 在此处的评论中提到了这一点。只是在这里分享,将来它可以帮助人们,除了上述规则之外,这是作为解决方案的一部分完成的。
我有一个使用 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 在此处的评论中提到了这一点。只是在这里分享,将来它可以帮助人们,除了上述规则之外,这是作为解决方案的一部分完成的。