【发布时间】:2013-09-27 13:07:10
【问题描述】:
我正在尝试重写我的动态产品页面 URL
一个例子是:
product.php?id=780-1AC930D
我正在尝试将其重写为:
产品/780-1AC930D
我需要该变量仍然通过 URL 传递,但目前它对我不起作用。
我在product.php 页面顶部有一个重定向,如下所示:
$prodID = $_GET['id'];
if(!isset($prodID) && $prodId == ""){
header( 'Location: http://www.***********.com' ) ;
}
else{
我知道 GET 变量没有通过,因为它一直在重定向我。
HTACCESS 文件的代码是这样的:
Options FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^product/(.*)$ /product.php?id=$1 [QSA]
URL 的 HTML 是:
<a href = "product/<?php echo $product[$i]['catID'];?>">
有人知道为什么这不起作用吗?
编辑以提供更多信息。
这是我的整个 HTACCESS 文件
Options FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^product/(.*)$ /product.php?id=$1 [QSA]
## If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
## If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
## If the request is for a valid link
RewriteCond %{REQUEST_FILENAME} -l
## don't do anything
RewriteRule ^ - [L]
RewriteRule ^([^/.]+)/([^/]+)/?$ /$1.php?cat=$2 [L,QSA]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+([^.]+)\.php\?cat=([^\s&]+)&subCat=([^\s&]+)\s [NC]
RewriteRule ^ /%1/%2/%3? [R=301,L]
RewriteRule ^([^/.]+)/([^/]+)/([^/]+)/?$ /$1.php?cat=$2&subCat=$3 [L,QSA]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+([^.]+)\.php\?cat=([^\s&]+)\s [NC]
RewriteRule ^ /%1/%2? [R=301,L]
# REMOVE PHP EXTENSIONS
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L,QSA]
我刚刚将 RewriteRule ^product/(.*)$ /product.php?id=$1 [QSA] 从“# REMOVE PHP EXTENSIONS”上方移动到 RewriteBase 下方,它似乎解决了我的问题。
其他重写规则适用于我的类别和子类别页面,然后才真正进入产品页面。
所以我很好奇为什么将这个 product.php 行放在其他东西之上呢?
【问题讨论】:
-
您是否已经进行了任何调试?错误信息是什么?
-
我没有收到错误消息。它只是重定向我,因为 IF 语句指出如果 $_GET['id'] 不存在然后重定向。如果我取消该重定向,那么它只会加载一个空白的产品页面
-
只是为了排除拼写错误、缓存重定向等等,您对
var_dump($_GET)有什么看法? -
var_dump($_GET);给我 "array(1) { ["cat"]=> string(11) "780-1AC930D" }" 但是 var_dump($_GET['id']);给我“NULL”
-
问题是你的重写规则
RewriteRule ^product/(.*)$ /product.php?id=$1实际上是RewriteRule ^product/(.*)$ /product.php?cat=$1。也许您的其他重写规则之一有错误导致这种情况,而不是具体的。