首页 > 解决方案 > .htaccess 重写规则不包括 index.php

问题描述

我有一个 .htaccess 规则,它获取 url 的第一个目录部分并使用它从数据库中查找产品,如下所示 www.website.com/product-1。我使用以下规则,它工作正常:

RewriteRule ^([-_a-z0-9]+)?$ /product.php?product_url=$1 [NC,L]

问题是,当我访问主页 www.website.com/ 时,它试图寻找一个空白产品。如果我想访问主页,我必须使用 www.website.com/index.php。

我怎样才能保持我上面的url结构,但让www.website.com/显示主页index.php?

标签: php.htaccess

解决方案


主要问题是您的正则表达式也匹配空字符串。

您应该改用此规则:

RewriteRule ^([-_a-z0-9]+)/?$ product.php?product_url=$1 [NC,L,QSA]

此正则表达式使请求 URI 中的尾部斜杠可选,但不匹配空字符串(登录页面)

另外考虑使用这两个条件来跳过此重写中的所有文件和目录:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([-_a-z0-9]+)/?$ product.php?product_url=$1 [NC,L,QSA]

推荐阅读