.htaccess在本地但不在服务器上工作(但没有404错误)

时间:2013-05-23 13:30:15

标签: mod-rewrite

我有一个.htaccess应该重写我的网址。我的主人告诉我它支持URL重写,我通过使用phpinfo()和检查来验证。

无论如何,这是我的.htaccess:

RewriteEngine On

RewriteRule ^([_a-zA-Z0-9]+)$ index.php?page=$1 [R]

它在本地就像一个魅力,但在我的服务器上,它什么也没做。

我之前在互联网上检查了这个,有些人有,但他们都有404错误,而我没有404错误。它只是没有重定向,它没有做任何事情,所以我得到了各种错误信息。

2 个答案:

答案 0 :(得分:1)

  

RewriteRule ^([_a-zA-Z0-9]+)$ index.php?page=$1 [R]

规则中的正则表达式与任何位置的斜杠都不匹配。我不确定这是否可以接受,你不提供任何请求示例,但我认为不是。

您可以在根目录下的一个.htaccess文件中尝试此规则集:

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !index\.php [NC]
RewriteRule ^([^/]+)/?$ index.php?page=$1    [L]

对于永久重定向,用[R = 301,L]替换[L]。

答案 1 :(得分:0)

您可以确保在重写之前,您匹配的文件(!-f)或目录(!-d)不存在。这样你就不会得到像/index.php?page=index这样的500循环。此外,^字符与字符串的开头匹配,因此如果您的原始测试位于子目录中,则不会重写,因为您不允许使用斜杠。

这适用于任何实例,但它只会使页面变量成为URI中的最后一个字符串。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ([_a-zA-Z0-9]+)$ /index.php?page=$1 [R,L]