Mod_rewrite导致404错误

时间:2010-06-07 15:20:03

标签: php .htaccess mod-rewrite

这些是来自我的两个本地主机站点的.htaccess文件。

虚拟主机1(mysite1.com):

    # this is the initialization
Options         +FollowSymLinks
RewriteEngine On # Turn on the rewriting engine 
RewriteRule ^news-07/?$ news_01_06_2007.php [NC,L] 
# Handle requests for "news"
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)\.php$ $1 [nc]
#RewriteRule ^(.*)\.php$ http://mysite1.com/$1 [R,NC]

但是,当我尝试http://www.mysite1.com/testfile.php时,它会重定向到http://mysite.com/testfile,除非显示以下消息:

  

未找到
  在此服务器上找不到请求的URL / testfile。

如何解决此错误消息并确保我的.htaccess文件有效?

我能够很好地理解.htaccess,关于阻止蜘蛛等事情,但是这个问题引起了我一些问题,有人知道什么是错的,以及如何防止将来再次发生这种错误?

所有帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

我想你可能会试图倒退。尝试这样的事情:

RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$  $1.php  [nc]

答案 1 :(得分:0)

使用

启用MultiViews
Options +MultiViews

这不仅适用于.php文件,还适用于客户端声称在请求中接受的所有文件。见here。请注意,Apache中错误但工作的配置过去给MultiViews命名不好,请参阅here以确保正确配置了Apache。

如果你想使用重写规则,我会这样做(未经测试):

RewriteCond $0 !\.[a-zA-Z0-9]+$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$  $0.php [QSA]

QSA标志是必要的,以便您不会丢失查询字符串