.htaccess 未按预期运行

.htaccess 未按预期运行

尽管我是 htaccess 的新手,但过去几天我学到了很多东西,但我被困在某个部分,导致网站无法正常运行。以下是我遇到困难的代码部分:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME}.php -f
Rewriterule ^ %{REQUEST_FILENAME}.php [NC]
# RewriteCond /templates/%{REQUEST_FILENAME}.html -f
RewriteRule ^([^/\.]+)$ index.php?$1 [NC,S=1]
RewriteRule ^([a-zA-Z0-9]+)$ product.php?product_id=$1 [NC]

第一个 RewriteCond 和 RewriteRule 运行完美。我对接下来发生的事情感到困惑。

我需要实现的是,当用户输入/一些词它会搜索是否存在同名文件/模板文件夹,因此可以作为index.php?一些词否则它将被用作product.php?product_id=some-word。的的索引.php当第二个条件被注释掉时,规则运行良好,但当只添加产品.php规则有效。

提供的“标签”可以是数字、字母、带连字符的单词(即任意单词)或数字和字母的组合。规则不区分大小写。

我非常感谢对此事提供的任何帮助。

答案1

问题%{REQUEST_FILENAME}绝对从 URL 转换而来的路径,即http://example.com/foobar它可能类似于/var/www/vhost/example.com/httpdocs/foobar(取决于您的 Web 服务器的设置方式)。我建议您在 URL 上使用模式匹配,如下所示

RewriteCond %{DOCUMENT_ROOT}/templates/$1.html -f
RewriteRule ^([^\/\.]+)$ index.php?$1 [NC,S=1]

(但我没有测试过)

相关内容