1

我有一个类别页面,通过循环列出数据库中的所有项目。

类别页面中的每个项目都链接到单独的产品页面 (product.php),该页面与类别页面位于同一目录中。产品页面是动态的,其内容取决于 $_GET 变量的值:

生成 product.php 页面的主类别页面的链接是:

<a href="product.php?subject=<?php echo urlencode($list_savory["product_name"]); ?>">

生成的 product.php URL 显示为:

shop/popcorn/product.php?subject=Bacon+and+Cheddar+Popcorn

我添加了以下 .htaccess 代码以删除查询字符串并将“+”替换为破折号:

RewriteEngine on
RewriteBase /

RewriteCond %{QUERY_STRING} !no-redir [NC]
RewriteCond %{QUERY_STRING} (^|&)subject=([^&]+) [NC]
RewriteRule ^(.*)/product.php$ $1/%2? [NC]

RewriteRule ^([^+\s]+)(?:[+\s]+)([^+\s]+)((?:[+\s]+).*)$ $1-$2$3 [DPI,N]
RewriteRule ^([^+\s]+)(?:[+\s]+)([^+\s]+)$ $1-$2 [R=301,DPI,L]

在 .htacess 代码之后,生成的 URL 格式为

shop/popcorn/Bacon-and-Cheddar-Popcorn

.htaccess 代码可以完美地重新格式化 URL,但我无法访问 $_GET 变量,因此页面无法正确加载。如何修改 .htaccess 代码以便传递 $_GET 变量?

4

1 回答 1

0

如果您不想要查询字符串,请不要将其添加到您的内容中:

<a href="<?php echo urlencode($list_savory["product_name"]); ?>">

生成的 URL 显示为:

/shop/popcorn/Bacon+and+Cheddar+Popcorn

然后在您的 htaccess 文件中,您需要在内部将其路由到product.php并将产品名称作为“主题”传递:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^shop/popcorn/(.*)$ /shop/popcorn/product.php?subject=$1 [L,B,NC]

不确定您的其他规则应该做什么,我想您可以将它们附加到适当的地方。上述规则需要在文档根目录的 htaccess 文件中

于 2013-08-20T18:47:02.223 回答