问题:一些PHP页面的等效(apple.html,apple.php; orange.html,orange.php),但不是所有的(grapes.html)。htaccess重写,如果重定向文件存在
目标:如果php版本存在,重写,否则保留html版本。
我:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)\.html$ /$1.php [R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.php$ /$1.html [R]
有趣的问题:
如果我不把/在$ 1.PHP前然后我结束了:site.com/document/root/path(即:site.com/home/user/www/file.php)
当调用第二个RewriteRule时,我得到http://site.com/http:/site.com/page.html,它告诉我有太多的重定向。注意第二个http中只有一个/。
我已经取得了一些进展,我添加了RewriteBase /,并在$ 1之前删除了/,但仍然收到了太多的重定向错误(网站site.com/page.html导致了太多重定向清除您的Cookie或允许使用第三方Cookie可能会解决问题,否则可能是服务器配置问题,而不是计算机问题)。
看来,如果我只是重写HTML - > PHP - > HTML我得到了同样的错误。所以它看起来像逻辑工作,但这种逻辑是不允许的。我想不出任何其他方式可以看到文件的“php版本”是否存在?我认为这是唯一的方式做类似的东西:
RewriteCond ^(.*)\.html$ $1.php -f
RewriteRule ^(.*)\.html$ $1.php [R]
不幸的也并非完全奏效(我猜是因为它对状态行三段)。我试图让名不带扩展名,然后说,如果filename.php是一个文件,重写page.html中到page.php文件
当我第一次读到您的电子邮件,我很喜欢啊哈哈!然后我尝试了它,但没有效果:(即使php存在,它仍然会去page.html。在第二个RewriteCond中,你是否意味着$ 1而不是%1? – user677285 2011-03-30 14:25:35
我刚刚在我的apache上测试过,它工作正常。你使用的是httpd.conf还是.htaccess?如果有其他的重写规则,你会发布所有重写规则吗?%符号应该用在RewriteCond中,$用在RewriteRule中,至少这是我记得的。 – szemian 2011-03-30 14:35:56