我想要网址:
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
这些都不起作用。我做错了什么?
还有一种简单的方法来调试这些规则吗?像控制台记录变量一样吗?
答案 0 :(得分:3)
-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]
答案 1 :(得分:1)
我想你的意思是
行RewriteCond post/%{REQUEST_URI}.php -f
请求的URI的路径组件,例如“/index.html”。
post/%{REQUEST_URI}.php
是Apache Web服务器运行的相对路径。这可能是根目录/
,Apache的配置目录/etc/apache2
,其文档根/var/www/html
,甚至是/var/tmp
,或其他任何内容。
/post/%{REQUEST_URI}.php
/etc/apache2/post/%{REQUEST_URI}.php
/var/www/html/post/%{REQUEST_URI}.php
/var/tmp/post/%{REQUEST_URI}.php
/home/olaf/post/%{REQUEST_URI}.php
如您所见,您无法真正了解Apache将查看的文件。 Apache可能会在这个地方找到一个文件,或者可能没有。当然,您必须提供已建议的@anubhava绝对路径。