Php htaccess如果存在重定向文件,则重写
问题是:一些php等价物的html页面(apple.html,apple.php;orange.html,orange.php),但并非所有页面都是(grapes.html) 目标:如果php版本存在,重写,否则保留html版本 我有:Php htaccess如果存在重定向文件,则重写,php,.htaccess,rewrite,Php,.htaccess,Rewrite,问题是:一些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 ^(.*)
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)
当调用第二个重写规则时,我得到一个消息,它告诉我重定向太多了。请注意,第二个http中只有一个/
我已经取得了一些进展,在$1之前添加了RewriteBase/并删除了/,但仍然出现了重定向太多的错误(位于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您应该能够通过使用两个条件来实现这一点:
RewriteCond %{REQUEST_FILENAME} (.*)\.html$
RewriteCond %1\.php -f
RewriteRule ^(.*)\.html$ $1.php [R,L]
第一个条件检查文件名是否以.html结尾,第二个条件使用第一个条件中的反向引用%1检查.php版本是否存在
希望有帮助。:很抱歉这么晚才回答,但您需要添加RewriteBase指令才能正常工作 我也遇到了同样的问题(与您的http:/stufff有关),并通过以下方式解决了此问题:
RewriteBase /your/application_path
RewriteCond %{REQUEST_FILENAME} (.*)\.html$
RewriteCond %1\.php -f
RewriteRule ^(.*)\.html$ $1.php [L]
希望这会有帮助 我还想将所有.html请求重写为.php文件,但前提是.php文件存在。但我的变化是,只有当实际的.html文件不存在时,才会发生这种情况 因此,只有对不存在的.html文件的调用才被重写为.php文件,如果它们确实存在,则按照以下规则:(我还成功地在XAMP本地服务器和Apache在线服务器上进行了测试!)
当我第一次读到你的电子邮件时,我就像是啊哈!然后我试了一下,但没有用:(即使php存在,它仍然会转到page.html。你是不是碰巧在第二次重写时指的是$1而不是%1?我刚刚在apache上进行了测试,它可以工作。你使用的是httpd.conf还是.htaccess?如果还有其他重写规则,你会发布所有的重写规则吗?%symbol应该在重写中使用,$在重写规则中使用,至少是这样的。)这就是我所记得的。:)
# Rewrite rules to .html file to .php if the .php version
# does actually exist.
RewriteCond %{REQUEST_FILENAME} (.*)\.html [NC]
RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteCond %1\.php -f [NC]
RewriteRule ^(.*).html$ $1.php [NC]