問題:一些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