apache - 将 RewriteCond 与 %{REQUEST_URI} 一起用于 mod_rewrite

标签 apache .htaccess mod-rewrite url-rewriting

我想要网址:

http://domain.com/category/subcategory/title

指向:

http://domain.com/posts/category/subcategory/title.php

我的 .htaccess 文件如下所示:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{QUERY_STRING} !^.+
#RewriteCond post/%{REQUEST_URI}.php -f
RewriteRule ^(.*)$ post/$1.php [L]

但是当我取消注释上面的行时它不起作用。

我试过了:

RewriteCond /post/%{REQUEST_URI}.php -f
RewriteCond post/%{REQUEST_URI}.php -f
RewriteCond post%{REQUEST_URI}.php -f

这些都不起作用。我做错了什么?

还有调试这些规则的简单方法吗?比如控制台日志变量之类的?

最佳答案

-f 检查需要完整的文件系统路径。您可以使用 %{DOCUMENT_ROOT} 变量来做到这一点:

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{DOCUMENT_ROOT}/post/$1.php -f
RewriteRule ^(.+)$ post/$1.php [L]

关于apache - 将 RewriteCond 与 %{REQUEST_URI} 一起用于 mod_rewrite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38998802/

相关文章:

php - apache 中的 php_value auto_prepend_file 如何与 php 一起工作,它是否始终保留在内存中?

regex - Apache - 重定向到相同的 URL 但附加了查询字符串

Apache Mod Rewrite 对于漂亮的 URL 不起作用

php - 使用 .htaccess 绕过 Zend Framework 并在子目录中运行不同的框架

mod-rewrite - 在不使用 .htaccess 文件的情况下,我在哪里可以将 RewriteRules 放在 Apache2 中?

apache - 如何限制每个客户端与 Apache 服务器的连接?

python - 省略尾部斜杠时静态文件不会加载到 Bottle 应用程序中

apache - Laravel 5.1 应用程序可以在没有 .htaccess 重写的情况下运行吗?

database - 在 Ubuntu 18.04 bionic 上安装 Adminer

security - 在论坛上发布 .htaccess 文件是否有危险?