php - .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?
解决方案
主要问题是您的正则表达式也匹配空字符串。
您应该改用此规则:
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]
推荐阅读
- python - 我如何创建调用相互中断的函数的热键?
- java - 休息:如何处理数千个相同的请求
- node.js - Angular 源文件在浏览器中可见。如何隐藏?
- javascript - Slick Carousel - 在移动设备上幻灯片中的 5 个项目到 1 个项目
- python-3.x - 尝试获取占位符详细信息时如何访问幻灯片的形状元素?这是使用 Python PPTX 完成的
- javascript - 在 v-for 循环中访问元素的数据 (Vue.js)
- php - 为什么 Laravel 提供默认时间戳?
- django - Django Formset Validation - Formset 中的总和值
- r - 如何在 r 中创建一个新的键值对
- java - 为什么jar的父文件夹也出现在引用的库中?