Mod Rewrite让我很难过

时间:2012-10-12 05:44:37

标签: apache .htaccess mod-rewrite

我目前正在Windows 7上使用wamp。我想清楚地清理我的网址。我试图找到当前的语法,但是我没有想到它。

我现在的路径是localhost / rs / index.php
当我转到localhost / rs / user时,它给了我一个404,但localhost / rs /给了我index.php页。

这就是我在wamp的www目录中的.htaccess文件中所拥有的内容。

RewriteEngine On
RewriteRule ^/$ index.php
RewriteRule ^/([a-z]+)$ index.php?page=$1
RewriteRule ^/([a-z]+)/$ index.php?page=$1

我没有评论该行

LoadModule rewrite_module modules/mod_rewrite.so

在Apache

的httpd.conf文件中

怎么了?我的.htaccess文件是否在错误的位置?我的语法错了吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

.htaccess放入/rs文件夹并尝试

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9]*)/?$ index.php?page=$1 [L]

希望这会有所帮助

答案 1 :(得分:1)

您的.htaccess文件应放在'/ rs'文件夹中,与index.php所在的目录相同。

我尝试过启用重写日志,以及我在那里看到的,当试图访问localhost/test/user时:

  

:: 1 - - [12 / Oct / 2012:09:53:11 +0400] [localhost / sid#68a898] [摆脱#1cc4d48 / initial](3)[perdir D:/ Development / htdocs / test /] strip per-dir前缀:D:/ Development / htdocs / test / user - >用户

     

:: 1 - - [12 / Oct / 2012:09:53:11 +0400] [localhost / sid#68a898] [摆脱#1cc4d48 / initial](3)[perdir D:/ Development / htdocs / test /]将模式'^ / $'应用于uri'用户'

     

:: 1 - - [12 / Oct / 2012:09:53:11 +0400] [localhost / sid#68a898] [摆脱#1cc4d48 / initial](3)[perdir D:/ Development / htdocs / test /] strip per-dir前缀:D:/ Development / htdocs / test / user - >用户   :: 1 - - [12 / Oct / 2012:09:53:11 +0400] [localhost / sid#68a898] [摆脱#1cc4d48 / initial](3)[perdir D:/ Development / htdocs / test /]申请模式'^ /([az] +)$'到uri'用户'

     

:: 1 - - [12 / Oct / 2012:09:53:11 +0400] [localhost / sid#68a898] [摆脱#1cc4d48 / initial](3)[perdir D:/ Development / htdocs / test /] strip per-dir前缀:D:/ Development / htdocs / test / user - >用户

     

:: 1 - - [12 / Oct / 2012:09:53:11 +0400] [localhost / sid#68a898] [摆脱#1cc4d48 / initial](3)[perdir D:/ Development / htdocs / test /]将模式'^ /([az] +)/ $'应用于uri'用户'

     

:: 1 - - [12 / Oct / 2012:09:53:11 +0400] [localhost / sid#68a898] [摆脱#1cc4d48 / initial](1)[perdir D:/ Development / htdocs / test /]通过D:/ Development / htdocs / test / user   

从第一行可以清楚地看出,mod_rewrite正在剥离开头'/',而你正在获得'user'而不是'/ user'。因此,重写规则应该没有'/',即:

RewriteEngine On
RewriteRule ^$ index.php
RewriteRule ^([a-z]+)/?$ index.php?page=$1

还要注意,我通过写'/?'结合了两个最后的规则。这意味着url末尾的'/'符号是可选的。

要打开重写日志,请在httd.conf文件中设置以下内容:

#
# Logging for mod_rewrite
# Use RewriteLogLevel 3 only for debug purposes
# Normally use RewriteLogLevel 0
#
<IfModule rewrite_module>
    RewriteLogLevel 3
    RewriteLog "logs/rewrite.log"
</IfModule>

这样就可以在logs / rewrite.log文件中创建日志。这通常是检查出错的最佳方式。

答案 2 :(得分:0)

如果您在子文件夹中运行它,则需要在RewriteEngine On

之后添加此行
RewriteBase /rs

另外,请确保您的apache虚拟主机部分中具有此值

AllowOverride All