使用 RewriteCond 和 %{REQUEST_URI} 进行 mod_rewrite

Cra*_*aig 3 apache .htaccess mod-rewrite url-rewriting

我想要网址:

http://domain.com/category/subcategory/title
Run Code Online (Sandbox Code Playgroud)

指向:

http://domain.com/posts/category/subcategory/title.php
Run Code Online (Sandbox Code Playgroud)

我的 .htaccess 文件如下所示:

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

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

我努力了:

RewriteCond /post/%{REQUEST_URI}.php -f
RewriteCond post/%{REQUEST_URI}.php -f
RewriteCond post%{REQUEST_URI}.php -f
Run Code Online (Sandbox Code Playgroud)

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

还有一种简单的方法来调试这些规则吗?比如控制台记录变量之类的?

anu*_*ava 6

-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]
Run Code Online (Sandbox Code Playgroud)