如何在.htaccess中将查询字符串重写为斜杠

如何在.htaccess中将查询字符串重写为斜杠,.htaccess,.htaccess,这是我的url:。我使用的是laravel 5.4。我希望我的应用程序与旧链接向后兼容 我一直想这样写 这就是我到目前为止提出的,正如您所看到的,仍然有“?id=”我不想要。 使用以下规则 RewriteEngine On Rewritecond %{REQUEST_FILENAME} !-f Rewritecond %{REQUEST_FILENAME} !-d RewriteRule ^([\w-]+)/([\d]+)$ $1.php?id=$2 [L] 这可能就是您正在寻找的: Rewr

这是我的url:。我使用的是laravel 5.4。我希望我的应用程序与旧链接向后兼容

我一直想这样写

这就是我到目前为止提出的,正如您所看到的,仍然有“?id=”我不想要。 使用以下规则

RewriteEngine On
Rewritecond %{REQUEST_FILENAME} !-f
Rewritecond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/([\d]+)$ $1.php?id=$2 [L]

这可能就是您正在寻找的:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^id=(\d+)$  
RewriteRule ^/?profile\.php$ /profile/%1 [R=301,QSD]
这将从外部将传入请求重定向到资源
/profile.php?id=2
到URL
/profile/2
,因此在浏览器中更改URL


如果您收到http状态500(内部服务器错误),那么您的http服务器很可能是一个非常旧的版本,您必须使用变通方法来获得或多或少干净的结果:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^id=(\d+)$  
RewriteRule ^/?profile\.php$ /profile/%1? [R=301]
上述规则集在http服务器(虚拟)主机配置或动态配置文件(“
.htaccess
”样式文件)中也应同样有效。动态配置文件必须放在http服务器主机
DOCUMENT\u ROOT
位置内



还有一个一般性提示:您应该始终希望将这些规则放在http服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。这些文件是出了名的容易出错,难以调试,而且它们确实降低了服务器的速度。只有在您无法控制主机配置的情况下(读:非常便宜的主机服务提供商),或者如果您的应用程序依赖于编写自己的重写规则(这是一个明显的安全噩梦),才提供它们作为最后一个选项。

文件中使用此规则

RewriteEngine On
RewriteRule ^profile/([^/]*)$ /profile.php?id=$1 [L]

它将给您留下URL:
http://dev.minestatus.co/profile/2
。在测试之前,请确保清除缓存。

这是向后的,可能我有点困惑,这将把profile.php?id=2重写为profile/2?它不工作了laravel@DarkMoria所以我建议你把你的实际问题弄得更精确一些:实际请求的URL是什么,应该调用的实际内部资源是什么。@DarkMoria哦,还有。。。“它不起作用”从来没有在任何时间任何地方帮助过任何人解决问题;-)准确点!你到底是什么意思?@DarkMoria和一个注释:你现在使用的URL样式与MVC无关,也可以使用“传统的”基于参数的URL样式。您当前的风格通常被称为“SEO友好型”,因为许多机器人忽略了传统的GET参数(这是有意义的)。“机器人忽略了传统的GET参数”-稍微放一放,但机器人不会忽略GET参数。这些(非URL参数)URL被称为“用户友好”,它们与SEO直接无关(当用户发现它们更友好时,它们帮助点击率)。
RewriteCond%{THE_REQUEST}\h/profile\.php\?id=(\d*)
\n
RewriteRule^/profile/%1?[R=303,L]
(303用于测试)@Deadooshka它重定向了,但url被添加到了替换端。还可以考虑在应用程序中链接到的URL是什么?您使用的是哪个版本的Apache?
RewriteEngine On
RewriteRule ^profile/([^/]*)$ /profile.php?id=$1 [L]