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