Mod rewrite .htaccess在本地工作,但不在服务器上(但无404错误)

Mod rewrite .htaccess在本地工作,但不在服务器上(但无404错误),mod-rewrite,Mod Rewrite,我有一个.htaccess,应该重写我的URL。我的主机告诉我它支持URL重写,我通过使用phpinfo()和检查验证了这一点 无论如何,这是我的.htaccess: RewriteEngine On RewriteRule ^([_a-zA-Z0-9]+)$ index.php?page=$1 [R] 它在本地很有魅力,但在我的服务器上,它什么都没做 我之前在互联网上检查过这个,有些人有,但他们都有404错误,而我没有404错误。它根本不重定向,也不做任何事情,所以我收到各种各样的错误消息

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

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

RewriteEngine On

RewriteRule ^([_a-zA-Z0-9]+)$ index.php?page=$1 [R]
它在本地很有魅力,但在我的服务器上,它什么都没做

我之前在互联网上检查过这个,有些人有,但他们都有404错误,而我没有404错误。它根本不重定向,也不做任何事情,所以我收到各种各样的错误消息

RewriteRule^([\u a-zA-Z0-9]+)$index.php?页面=$1[R]

规则中的正则表达式在任何位置都不匹配带斜杠的字符串。我不确定这是否可以接受,您也没有给出任何请求示例,但我不认为可以接受

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

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

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

您可以确保在重写之前,您匹配的文件(!-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]

服务器上是否打开mod_rewrite?使用此代码显示已安装的模块,并将其上载到服务器,然后导航到以下页面:
是mod_rewrite已打开。还有其他建议吗?谢谢谢谢你的帮助。这对我来说不起作用(500个内部错误,在本地也不起作用。还有其他想法吗?非常感谢。修改了我对单个一级目录的答案。如果仍然有500个错误,.htaccess文件中必须有更多的代码,而您的问题中缺少这些代码。