在.htaccess之后无法访问$ _GET变量

时间:2013-08-20 18:28:27

标签: php .htaccess url

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

类别页面中的每个项目都链接到单个产品页面(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变量?

1 个答案:

答案 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文件中。