.htaccess重写规则不包括index.php

时间:2018-06-22 20:19:44

标签: php .htaccess

我有一个.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?

3 个答案:

答案 0 :(得分:3)

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

您应该改用此规则:

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]

答案 1 :(得分:2)

这应该跳过index.php

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

答案 2 :(得分:1)

您可以尝试以下方法:还请检查并修改这个问题,我曾经询问过是否可以对其进行调整Perform If statements for a specific file name in .htaccess

RewriteRule ^index\.php$ - [L] //This would make it skip index.php and look at product.php
RewriteRule ^([-_a-z0-9]+)?$   /product.php?product_url=$1    [NC,L]