在.htaccess中使用mod-rewrite进行URL重写

yws3nbqq  于 2023-04-07  发布在  其他
关注(0)|答案(1)|浏览(109)

我该怎么做,重写一个URL?

test.php?url=username

test/username/

我在.htaccess文件中尝试过这个方法,但没有成功。

RewriteCond %{QUERY_STRING} ^name=(.+)$
RewriteRule /test.php$ /test/%1 [E=FILENAME:%1]
k3fezbri

k3fezbri1#

按照你所建议的方向“重写”请求是没有意义的,你把请求 * 从 * /test/username/(所需的“漂亮”URL)重写为/test.php?url=username(实际处理请求的底层URL/文件路径)。
因此,您应该在HTML源代码中链接到/test/username/
然后你可以在.htaccess中使用mod_rewrite来执行必要的内部重写,将visible/pretty转换为你的服务器可以理解的底层URL/file-path。例如:

# Ensure that MultiViews is disabled
Options -MultiViews

RewriteEngine On

RewriteRule ^test/([^/]+)/$ test.php?url=$1 [L]

请注意,需要禁用多视图才能使其工作。
还要注意的是,在.htaccess(一个 directory 上下文)中,RewriteRulepattern 匹配的URL路径不是以斜杠开头的。我还从 substitution 字符串中省略了斜杠前缀,以便重写为文件路径(而不是URL路径)。

RewriteCond %{QUERY_STRING} ^name=(.+)$
RewriteRule /test.php$ /test/%1 [E=FILENAME:%1]

这是试图做“相反”的事情,并期望来自客户端的请求的格式为/test.php?name=username-如果你想让URL“看起来像”/test/username/,这是没有意义的。你还省略了 substitution 字符串(第二个参数)的尾部斜杠。
您还出于某种原因设置了一个FILENAME环境变量?

相关问题