【发布时间】:2011-03-25 19:10:29
【问题描述】:
问题:一些 php 等效的 html 页面(apple.html、apple.php;orange.html、orange.php),但不是所有的都可以(grapes.html)。
目标:如果存在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
【问题讨论】: