1

我有一个奇怪的问题。我有一个 .htaccess 文件,只有当我使这些底部的两个条件/重写不同的文件夹时,它才会起作用。我希望 products.php 和 specs.php 页面都显示:www.example.com/products/ 然后是它们各自的漂亮 URL 的 slug。就目前而言,如果我有不同的文件夹名称,我只能让它(有点)工作。Products.php 显示一个类别中许多产品的简要描述(在域之后它将显示 /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]
4

1 回答 1

0

它们必须不同,否则 mod_rewrite 将不知道一个是产品还是一个规范。如果网址是:

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

asdljfcaijfaewlf”是一个产品的蛞蝓吗?或者它是一个规格的蛞蝓?或者两者都不是?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]
于 2013-09-10T23:54:48.403 回答