2

我只是在这里解释我的问题:

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

4

2 回答 2

3

找了很久,把我可爱的头发拔了出来,我找到了解决办法。

我刚刚添加

Options -MultiViews

到我的 htaccess 文件并修复它。

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

于 2012-06-07T22:56:48.523 回答
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 文件。

此外,使用更简单的重写 catch all 进行测试并单独测试以查看它是否完全像这样工作(删除 htaccess 文件中的所有其他内容以限制测试):

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

如果 apache 的配置设置正确,对您网站的任何请求都应发送至 google。

于 2012-06-07T13:28:47.793 回答