Apache mod重写404错误

时间:2009-02-13 00:55:58

标签: .htaccess mod-rewrite

我正在尝试设置一个简单的重写规则来转换网址,例如:

 index.php?page=login

类似

 page/login

但是,我一直收到404错误。

有人可以建议为什么以下可能不起作用吗?

htaccess的:

RewriteEngine on

RewriteRule ^page/([^/\.]+)/?$ index.php?page=$1 [L]

rewriteEngine off

我对此很陌生,任何建议都将不胜感激。 感谢。

4 个答案:

答案 0 :(得分:2)

我想你可能会倒退。您希望用户输入吗?

http://site.com/page/login

这是更合乎逻辑的情况。如果是这样,请执行以下操作:

RewriteEngine On
RewriteBase /
RewriteRule ^/page/login$ /index.php?page=login [L]

或者,更一般地说:

RewriteRule ^/page/(\w+)$ /index.php?page=$1 [L]

答案 1 :(得分:1)

确保使用RewriteBase。

这些是我通常使用的规则。 他们说任何不是文件或目录的请求都由index.php处理 在脚本中,请求的URI可通过$_SERVER['REQUEST_URI']获得。

RewriteEngine On
RewriteBase /some_dir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /some_dir/index.php [L]

答案 2 :(得分:0)

RewriteEngine on

RewriteRule ^page/([^/.]+)/?$ index.php?page=$1 [L]

rewriteEngine off

为什么要关闭RewriteEnginge?

答案 3 :(得分:0)

VolkerK提出了一个很好的观点:不要同时使用RewriteEngine onRewriteEngine off,因为你打开重写引擎,添加规则和转弯它再次关闭。 Apache配置不像编程那样工作,你有一组计算机按顺序执行的指令。您可以想象它更像这样:当Apache解析其配置文件(如.htaccess)时,它首先读入所有指令并将它们排序为将应用它们的自然顺序。它更像是在程序开始时初始化变量的值,无论你在什么顺序编写语句,结果通常都是相同的。

在你的情况下,在同一个文件中指定RewriteEngine onRewriteEngine off可能会混淆Apache,因为(在我的小比喻中)当Apache将指令分类为“自然”顺序时,它最终会出现像

这样的事情
RewriteEngine on
RewriteEngine off
RewriteRule ...

可能会关闭重写引擎。但是,当然,实际发生的事情比仅将指令排序到列表中更复杂,因此您无法确切地告诉Apache将如何处理像您这样的文件。只是不要试图为文件的不同部分打开和关闭重写引擎,并记住Apache的配置指令不仅仅是要按顺序运行的语句。