我有一个.htaccess应该重写我的网址。我的主人告诉我它支持URL重写,我通过使用phpinfo()和检查来验证。
无论如何,这是我的.htaccess:
RewriteEngine On
RewriteRule ^([_a-zA-Z0-9]+)$ index.php?page=$1 [R]
它在本地就像一个魅力,但在我的服务器上,它什么也没做。
我之前在互联网上检查了这个,有些人有,但他们都有404错误,而我没有404错误。它只是没有重定向,它没有做任何事情,所以我得到了各种错误信息。
答案 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]