.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
指令)。
我的网站使用 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
指令)。