Php 我必须传递slug以及其他参数来检索信息,但我想使用.htaccess隐藏url中显示的参数,slug除外

Php 我必须传递slug以及其他参数来检索信息,但我想使用.htaccess隐藏url中显示的参数,slug除外,php,.htaccess,url-rewriting,Php,.htaccess,Url Rewriting,我必须传递slug以及其他参数来检索信息,但我想隐藏url中显示的参数,slug除外。 我用.htaccess做了很多尝试,但仍然没有给我带来积极的结果 实际的url是这样的 我想把这个转换成 这是我将参数传递到reply.php页面的代码 echo "<a href='reply.php?user_id=$user_id &ans_id=$ans_id &id=$id &post_url=$post_url'>view replies</a>

我必须传递slug以及其他参数来检索信息,但我想隐藏url中显示的参数,slug除外。 我用.htaccess做了很多尝试,但仍然没有给我带来积极的结果

实际的url是这样的

我想把这个转换成

这是我将参数传递到reply.php页面的代码

echo "<a href='reply.php?user_id=$user_id &ans_id=$ans_id &id=$id &post_url=$post_url'>view replies</a>";
除了一个空白的白色屏幕外,没有显示任何内容


我该如何解决这个问题?

我认为在回答中总结一下可能是有意义的。特别是在你询问重定向问题后。您需要将重写和重定向分开,因为它们需要按站点方向进行操作:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^user_id=(\d+)&ans_id=(\d+)&id=(\d+)&post_url=([0-9a-zA-Z]+)$ 
RewriteRule ^reply\.php$ reply/%1/%2/%3/%4 [R=301,QSD]

RewriteRule ^reply/(\d+)/(\d+)/(\d+)/([0-9a-zA-Z]+)/?$ reply.php?user_id=$2&ans_id=$3&id=$4&post_url=$5 [END]

从http-302重定向开始是一个好主意,只有在一切正常后才将其更改为http-301。这样,您可以在仍在开发时防止缓存问题…

好吧,我们不能说任何关于白色屏幕的内容,您需要调试您的应用程序逻辑,而我们对此一无所知。最好的选择是开始监视http服务器的错误日志文件。在这里,您通常可以了解代码运行的实际问题。感谢@arkascha,当我将参数从1美元更改为4美元时,我实际上将参数从2美元改为5美元,现在它工作正常了。现在我想重定向这个重写规则,我正在尝试重写规则^reply/([0-9]+)/([0-9]+)/([0-9]+)/([0-9a-zA-Z]+)reply.php?user_id=$1&ans_id=$2&id=$3&post_url=$4[R=301,L]但它在不隐藏参数的情况下隐藏了相同的旧url。现在还不清楚您正在尝试做什么。如果您“重定向”浏览器,它将加载您将其发送到的目标URL,以便在查询字符串中包含GET参数,而这不是您想要的。所以问题是:你为什么要重定向?当我编写这个重写规则时,我转到我的浏览器并粘贴了它,它显示的结果与我的浏览器显示的这个url相同。但是当我打开我的网站时,它显示了这个url,我不想再显示这个url了,我想要这个url谢谢@arkascha先生,你在指导我很好。我只是把你上面的代码复制到我的htaccess文件中,但在测试后,它会显示相同的旧url,如有需要,请解释一下更改,以便我在这里尝试。哦,对不起,我没有考虑路径,在你的测试中,根本没有应用规则。我修改了答案,以便考虑完整路径。还有一件事:您用于测试的本地主机URL与您在问题中声称的不匹配。
user\u id
ans\u id
的值不是您声称的数字,而是包含其他内容:
http://localhost/qa1/reply.php?user_id=69%20&ans_id=44%20&id=71%20&post_url=what-是敏捷过程的最佳示例
%20
是编码的空白字符(空格字符)。你不希望在你的URL中出现这种情况。那是从哪里来的?您想修复引用,而不是匹配错误URL的规则。先生,我已经删除空白空间,现在它没有在URL中显示% 20。我很高兴看到你的答案有所改变。我尝试了您所做的更改,但是我得到了一个旧的url,它显示了所有带有值的参数。我使用的是PHP5.7。我想我的本地服务器有问题。但是htaccess运行良好,如果我放入垃圾,则显示505错误。我重新检查了上面给出的规则,它们看起来很好。服务器端文件系统中的动态配置文件(“.htaccess”)在哪里?
RewriteEngine On

RewriteCond %{QUERY_STRING} ^user_id=(\d+)&ans_id=(\d+)&id=(\d+)&post_url=([0-9a-zA-Z]+)$ 
RewriteRule ^reply\.php$ reply/%1/%2/%3/%4 [R=301,QSD]

RewriteRule ^reply/(\d+)/(\d+)/(\d+)/([0-9a-zA-Z]+)/?$ reply.php?user_id=$2&ans_id=$3&id=$4&post_url=$5 [END]