代码之家  ›  专栏  ›  技术社区  ›  twan

如何仅重写特定URL而不影响其他文件

  •  2
  • twan  · 技术社区  · 7 年前

    我正在尝试重写一个网店上的url,这样页面就没有文件扩展名,url会在url中显示产品所属的类别。

    我已经修复了类别部分,因此我的url现在如下所示:

    http://webshop.nl/douche/douche-2.html
    

    但我希望它看起来像这样:

    http://webshop.nl/douche/douche-2
    

    我试了以下几句话:

    RewriteRule         ^(.*)/(.*) product-page.php?cat=$1&alias=$2 [QSA,L]
    

    但这会将所有文件重写到产品页。php包括css/js/html文件。我是否可以以某种方式排除这些或仅将该行应用于产品?

    这就是我如何使用 alias 如果有帮助:

    $artikel = '
    SELECT cnt.id, cnt.title as content_title, cnt.alias as content_alias, cnt.catid, cnt.images, cnt.state, cnt.introtext, cat.id, cat.title as cat_title, cat.alias as cat_alias,
    MAX(case when f.field_id = 4 then f.value end) as prijs,
    MAX(case when f.field_id = 5 then f.value end) as prijsoud,
    MAX(case when f.field_id = 6 then f.value end) as specificaties
    FROM snm_fields_values f
    JOIN snm_content cnt
    ON cnt.id = f.item_id
    JOIN snm_categories cat
    ON cnt.catid = cat.id
    WHERE cnt.alias = "'.$conn->real_escape_string($_GET['alias']).'"
    AND cnt.state = 1
    GROUP BY f.item_id';
    $artikelcon = $conn->query($artikel);
    $artikel = $artikelcon->fetch_assoc();
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   anubhava    7 年前

    您可以使用此规则:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^([\w-]+)/([\w-]+)/?$ product-page.php?cat=$1&alias=$2 [QSA,L]
    
    • RewriteCond 确保仅为非文件和非目录重写
    • 更好地使用 [\w-]+ 而不是 .* 在regex中,避免将URL与点字符匹配。