使用mod_rewrite,我想要两条规则:
以便http://example.com/page.html
调用http://example.com/page
http://example.com/page.php
调用http://example.com/page
我试过这个,当我介绍.html规则时会中断:
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.htm(.*)$ http://%{HTTP_HOST}/$1.php [R,NC]
RewriteRule (.*) $1.php [R=301, L]
我是mod_rewrite的新手;有谁能告诉我如何更正我的代码?
答案 0 :(得分:0)
您的RewriteCond
条件太弱而无法捕获重写循环;他们只检查正在重写的路径是否要求具体的文件或目录。
是的,您的第一个重写规则应该停止循环,但条件仅适用于第一个RewriteRule
;你的第二个RewriteRule
是无条件的。每个RewriteRule
都有自己的RewriteCond
- s。
(第一条规则仍然可以循环,因为输入可以多次包含.htm
;在每次重写回合时,如果不包含包含.htm
匹配项的部分,则会删除一个.htm
在重写。)
你的第二个RewriteRule
是相对重写的。如果这是.htaccess
文件或<Directory>
配置(每个目录上下文),则需要RewriteBase
。否则,重写将采用http://example.com/foo
并生成http://example.com/path/to/docroot/foo.php
形式的网址,该网址仅在您的设置被黑客入侵以接受/path/to/docroot/
作为与/
同义的网址时才有效。