无法使用.htaccess将两个网址重写到同一文件夹

时间:2013-09-10 23:41:52

标签: php apache .htaccess mod-rewrite

我遇到了一个奇怪的问题。我有一个.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]

1 个答案:

答案 0 :(得分:0)

它们必须不同,否则mod_rewrite不会知道某个产品或某个产品是否符合规格。如果URL是:

http://www.example.com/products/asdljfcaijfaewlf

asdljfcaijfaewlf”是产品的一个标志吗?或者它是一个规格的slu ??还是不是? mod_rewrite无法知道,因为它无法从数据库或存储信息的任何地方获取slug。它只知道如何匹配请求。这就是为什么您需要允许它与/products//specs/文件夹匹配,以便它知道是否将它们路由到products.phpspecs.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]