我遇到了一个奇怪的问题。我有一个.htaccess文件,只有当我将这两个条件设置为底部/重写不同的文件夹时才会起作用。我想同时显示products.php和specs.php页面:www.example.com/products/后面跟着它们各自的网页。就目前而言,如果我有不同的文件夹名称,我只能将其用于(有点)工作。 Products.php显示了一个类别中的许多产品的简要描述(After domain it show / candy)。规格页面仅显示一个产品(在域之后它显示产品系列和产品名称糖果/情侣)。任何帮助将不胜感激!
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
#products.php pages
RewriteCond %{THE_REQUEST} html/products.php
RewriteCond %{QUERY_STRING} ^slug=(.*)$
RewriteRule ^html/products\.php$ http://www.example.com/products/%1? [R=301,L]
RewriteRule ^products/(.*)$ /html/products.php?slug=$1 [L]
#specs.php pages
#RewriteCond %{THE_REQUEST} html/specs.php
#RewriteCond %{QUERY_STRING} ^prodslug=(.*)$
#RewriteRule ^html/specspage\.php$ http://www.example.com/specs/%1? [R=301,L]
#RewriteRule ^specs/(.*)$ /html/specs.php?prodslug=$1 [L]
答案 0 :(得分:0)
它们必须不同,否则mod_rewrite不会知道某个产品或某个产品是否符合规格。如果URL是:
http://www.example.com/products/asdljfcaijfaewlf
“asdljfcaijfaewlf
”是产品的一个标志吗?或者它是一个规格的slu ??还是不是? mod_rewrite无法知道,因为它无法从数据库或存储信息的任何地方获取slug。它只知道如何匹配请求。这就是为什么您需要允许它与/products/
和/specs/
文件夹匹配,以便它知道是否将它们路由到products.php
或specs.php
。
此外,您的规则不一致:
RewriteRule ^html/specspage\.php$ http://www.example.com/specs/%1? [R=301,L]
需要
RewriteRule ^html/specs\.php$ http://www.example.com/specs/%1? [R=301,L]