我有一个类别页面,通过循环列出数据库中的所有项目。
类别页面中的每个项目都链接到单个产品页面(product.php),该页面与类别页面位于同一目录中。产品页面是动态的,其内容取决于$ _GET变量的值:
生成product.php页面的主类别页面中的链接是:
<a href="product.php?subject=<?php echo urlencode($list_savory["product_name"]); ?>">
生成的product.php网址显示为:
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变量?
答案 0 :(得分:0)
如果您不想要查询字符串,请不要将其添加到您的内容中:
<a href="<?php echo urlencode($list_savory["product_name"]); ?>">
生成一个显示为:
的网址/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文件中。