English 中文(简体)
Apache模块重写返回404错误。
原标题:
  • 时间:2009-02-13 00:55:57
  •  标签:

我正在尝试设置一个简单的重写规则,以转换类似于以下的网址:

 index.php?page=login

转化成类似于某物的东西

 page/login

然而,我一直收到404错误。

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

.htaccess:

RewriteEngine on

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

rewriteEngine off

I m quite new to this and any advice would be greatly appreciated. Thanks.

问题回答

我觉得你可能搞反了。你要用户自己输入这个吗?

http://site.com/page/login

Sorry, there is no text provided to be translated into Chinese. Please provide text for translation.

这是更合乎逻辑的情况。如果是这样,请这样做:

RewriteEngine On
RewriteBase /
RewriteRule ^/page/login$ /index.phpSorry, there is no text provided to be translated into Chinese. Please provide text for translation.page=login [L]

或者更一般地说:

RewriteRule ^/page/(w+)$ /index.phpSorry, there is no text provided to be translated into Chinese. Please provide text for translation.page=$1 [L]

请确保您使用 RewriteBase。

These are the rules I normally use. They say that any request that is not a file or directory, is handled by index.php In the script, the requested URI is available through $_SERVER[ REQUEST_URI ].

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

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

rewriteEngine off

你为什么关闭重写引擎?

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

在您的情况下,在同一文件中同时指定 RewriteEngine onRewriteEngine off 很可能会使 Apache 困惑,因为(以我的小比喻为例)当 Apache 按照指令的“自然”顺序进行排序时,它可能会得出类似于以下的结果:

RewriteEngine on
RewriteEngine off
RewriteRule ...

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





相关问题
热门标签