.htaccess 和 $_GET 问题

.htaccess and $_GET issue

我的网站使用 OVH 服务器 Apache/2.4.38 (Debian10).

我的 .htaccess 文件有问题, (我放在了/var/www/html,看这里->web tree)

我想添加一些重写规则来实现这个 URL :

https://example.fr/productPage1

而不是:

https://example.fr/productPage.php?id=1

这是我放在 htaccess 上的内容:

我试过了:

RewriteCond %{REQUEST_URI}  ^\/productPage\.php$
RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
RewriteRule ^(.*)$ https://example.fr/productPage%1? [R=301,L]

但是出现404错误,因为_GET已经不在URL, 我怎样才能到达 _GET?

(我有很多php函数使用CRUD方法)

谢谢

您的问题是:“... _GET 不再在 URL 中,我怎样才能到达 _GET?”

答案是:不能,因为 URL 中没有 get 参数。这实际上就是这次重写的重点:不是 在 URL 中有一个丑陋的论点。相反,该参数是所需 URL 的 path 组件的一部分。这意味着您需要从那里获取它:

RewriteEngine on
RewriteRule ^/?productPage(\d+)$ /productPage.php?id= [END]

如果您还想重定向仍在使用旧 URL 的客户端,则可以向此内部重写添加外部重定向:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^id=(\d+)$
RewriteRule ^/?productPage\.php$ /productPage%1 [R=301]
RewriteRule ^/?productPage(\d+)$ /productPage.php?id= [END]

您显然需要加载并启用重写模块才能正常工作。

您应该总是更愿意在实际的 http 服务器的主机配置中实施此类规则,如果可能。在您无权访问主机配置的情况下,您也可以使用分布式配置文件(“.htaccess”),但这有许多缺点。您还需要启用该功能(请参阅文档中的 AllowOverride 指令)。