Mod rewrite ModRewrite-如何配置.htaccess用于搜索引擎优化目的的mod_rewrite

Mod rewrite ModRewrite-如何配置.htaccess用于搜索引擎优化目的的mod_rewrite,mod-rewrite,seo,Mod Rewrite,Seo,我正在尝试对我的电子商务网站进行一些改进,以便更好地优化搜索引擎。更重要的一点是将产品设置为不使用旧的: /detail.php?pid=367 取而代之的是,我们设置了8个顶级类别,在8个顶级猫的下面各有3个子类别 例如,其中一个类别看起来像这样 /安全柜流体处理/流体桶推车/ 现在我想做的是在这些类别下为每个产品创建文件夹。例如: /安全柜液体处理/液桶车/润滑脂处理车/ 我的想法可能是,最好的方法是在末尾包含产品ID,因此应该是: /安全柜流体处理/液桶车/润滑脂处理车/856 这有意义吗

我正在尝试对我的电子商务网站进行一些改进,以便更好地优化搜索引擎。更重要的一点是将产品设置为不使用旧的:

/detail.php?pid=367

取而代之的是,我们设置了8个顶级类别,在8个顶级猫的下面各有3个子类别

例如,其中一个类别看起来像这样

/安全柜流体处理/流体桶推车/

现在我想做的是在这些类别下为每个产品创建文件夹。例如:

/安全柜液体处理/液桶车/润滑脂处理车/

我的想法可能是,最好的方法是在末尾包含产品ID,因此应该是:

/安全柜流体处理/液桶车/润滑脂处理车/856


这有意义吗?在这种情况下,我应该在.htaccess中添加什么呢?

您可以使用任何URL结构,只要模式在ID中找到,而不是在URL结构中找到,这是正常的方法

在您的问题中,模式可能是ID是数字的,因此可以从保存它的任何URL捕获它,而不管它的结构如何。例如:

http://example.com/cat1/cat2/ID/cat3

http://example.com/cat2/ID/cat3/cat1

对于在任何位置捕获数字字符串的规则没有任何区别,例如:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}  /([\d]+)/? 
RewriteRule .*  detail.php?pid=%1  [L,QSA]
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} .*/([0-9]+)/?$
RewriteRule .*  detail.php?pid=%1  [L,QSA]
它将以静默方式将传入URL中的ID传递给脚本,如下所示:

http://example.com/detail.php?pid=ID

当然,URL中ID之前不能有任何其他数字字符串

但是,如果您仍然希望将ID固定在URL中的最后一个位置,只需将上述规则集替换为以下规则集:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}  /([\d]+)/? 
RewriteRule .*  detail.php?pid=%1  [L,QSA]
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} .*/([0-9]+)/?$
RewriteRule .*  detail.php?pid=%1  [L,QSA]

只要模式是在ID中找到的,而不是在URL结构中找到的,就可以有任何URL结构,这是正常的方法

在您的问题中,模式可能是ID是数字的,因此可以从保存它的任何URL捕获它,而不管它的结构如何。例如:

http://example.com/cat1/cat2/ID/cat3

http://example.com/cat2/ID/cat3/cat1

对于在任何位置捕获数字字符串的规则没有任何区别,例如:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}  /([\d]+)/? 
RewriteRule .*  detail.php?pid=%1  [L,QSA]
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} .*/([0-9]+)/?$
RewriteRule .*  detail.php?pid=%1  [L,QSA]
它将以静默方式将传入URL中的ID传递给脚本,如下所示:

http://example.com/detail.php?pid=ID

当然,URL中ID之前不能有任何其他数字字符串

但是,如果您仍然希望将ID固定在URL中的最后一个位置,只需将上述规则集替换为以下规则集:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}  /([\d]+)/? 
RewriteRule .*  detail.php?pid=%1  [L,QSA]
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} .*/([0-9]+)/?$
RewriteRule .*  detail.php?pid=%1  [L,QSA]

看起来不错,我正在尝试实施,两个问题。1) [L,QSA]的作用是什么?2) 似乎它只取了这一个中的最后一个数字:RewriteCond%{REQUEST_URI}.*([\d]+)/?$我的数字范围是从1到3000。
QSA
Query String Append
标志,它在规则中添加查询字符串时执行它所说的操作。
([\d]+)
中的
+
意味着必须至少有一个没有最大值的数字。然后,1到3000范围内的所有数字都与条件匹配。嗯,由于某种原因,它不起作用。它只取最后一个数字。什么时候,什么时候数字在最后一个位置?请复制粘贴输入的URL和您的.htaccess文件contents.RewriteCond%{REQUEST_URI}/([0-9]+)/?看起来不错,我正在尝试实现两个问题。1) [L,QSA]的作用是什么?2) 似乎它只取了这一个中的最后一个数字:RewriteCond%{REQUEST_URI}.*([\d]+)/?$我的数字范围是从1到3000。
QSA
Query String Append
标志,它在规则中添加查询字符串时执行它所说的操作。
([\d]+)
中的
+
意味着必须至少有一个没有最大值的数字。然后,1到3000范围内的所有数字都与条件匹配。嗯,由于某种原因,它不起作用。它只取最后一个数字。什么时候,什么时候数字在最后一个位置?请复制粘贴输入的URL和.htaccess文件内容。重写条件%{REQUEST_URI}/([0-9]+)/?