htaccess重写在WAMP上脱机工作但在linux主机上没有在线工作

时间:2012-06-07 13:17:37

标签: linux .htaccess rewrite wamp

我将在这里解释我的问题:

http://mysite.com/movie/20000

应该改写为

http://mysite.com/movie.php?id=20000

我的htaccess文件:

Options +FollowSymlinks
RewriteEngine On
RewriteRule ^movie/([0-9]+)$ movie.php?id=$1

在我的localhost WAMP安装上,这很好用,但是当我把它放在我的linux主机上时,它并不完全有效。它确实转到了movie.php页面,但它似乎没有给出GET参数id。

修改:

如果我使用

Options +FollowSymlinks
RewriteEngine On
RewriteRule ^movie([0-9]+)$ movie.php?id=$1

然后

http://mysite.com/movie20000

转到正确的页面,但我希望/movie/20000而不只是/movie20000

我的主人似乎也会自动重新访问mysite.com/moviemysite.com/movie.php

2 个答案:

答案 0 :(得分:3)

经过很长一段时间的搜索,我把一些可爱的头发拉出来,我找到了解决办法。

我刚刚添加了

Options -MultiViews

到我的htaccess文件并修复它。

为什么呢?因为.php被添加到没有扩展名的网址,我真的不需要。

答案 1 :(得分:0)

这应该有用。

RewriteRule ^movie/([0-9]+)$ http://mysite.com/movie.php?id=$1 [NC,L]

不要忘记[NC,L]这意味着不区分大小写,最后一条规则......如果不这样做,它将继续处理您的htaccess规则,可能会触发其他规则。

不过,下面的内容是很好的建议.... :)

检查Rewrite模块是否加载了apache。在httpd.conf文件中查找这一行:

LoadModule rewrite_module modules/mod_rewrite.so

检查您的apache配置是否允许系统或虚拟主机定义中的.htaccess文件。

此外,使用更简单的重写测试捕获所有并单独测试以查看它是否正常工作(删除htaccess文件中的所有其他内容以限制测试):

RewriteEngine On
RewriteRule ^(.*)$ http://www.google.com [L,R=301]

如果正确设置了apache的配置,那么对您网站的任何请求都应该转到Google。