Apache中的纯文本重写Cond testStr


Plain text in Apache rewriteCond testStr

我有以下一组Apache rewriteCond/rewriteRule:

RewriteCond $1.php -f
RewriteRule ^(.+)/$ index.php?id=$1

我要做的是检查URL中的关键字是否是实际文件,并且该关键字只是文件的名称,没有.php扩展名。例如,如果 URL www.example.com/foo/并且文件 foo.php 存在,则重定向到 www.example/index.php?id=foo。

关于重写康德的文档 说:

TestString 是一个字符串,除了纯文本之外,还可以包含以下扩展构造:

。然后列出这些构造。因此,我使用引用"$1"并添加纯文本".php"以查看模式是否与实际的 php 文件匹配。但它不起作用。我发现的所有示例都只使用"扩展结构",但没有一个在测试搅拌中使用纯文本。它完全可以使用吗?如何?

您需要提供完整路径以使用 -f 检查文件是否存在。将您的规则替换为以下内容:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1'.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]