0

我试图重写我的动态产品页面 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 行放在其他东西之上呢?

4

2 回答 2

3

问题是在您要匹配的规则之前,另一个规则与请求匹配。在这种情况下,与您的请求匹配的规则是:

RewriteRule ^([^/.]+)/([^/]+)/?$ /$1.php?cat=$2 [L,QSA]

L 标志将停止此周期的重写。因此从未达到

RewriteRule ^product/(.*)$ /product.php?id=$1 [QSA]

有关标志的信息,请参阅此文档有关一般 mod_rewrite 的更多信息,请参阅此文档。

于 2013-09-27T13:35:17.550 回答
1

最可能的问题是没有 L在您的第一条规则中使用标志。像这样:

RewriteRule ^product/(.+)$ /product.php?id=$1 [QSA,NC,L]
于 2013-09-27T13:39:45.807 回答