【问题标题】:Mod Rewrite is giving me a hard timeMod Rewrite 让我很难受
【发布时间】:2012-10-12 05:44:37
【问题描述】:

我目前在 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 文件在错误的位置吗?我的语法错了吗?

谢谢!

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

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

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

    希望这会有所帮助

    【讨论】:

    • 我不得不将 RewriteBase / 更改为 RewriteBase /rs,但它有效!
    【解决方案2】:

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

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

    ::1 - - [12/Oct/2012:09:53:11 +0400] [localhost/sid#68a898][rid#1cc4d48/initial] (3) [perdir D:/Development/htdocs/test /] 去除每个目录前缀:D:/Development/htdocs/test/user -> user

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

    ::1 - - [12/Oct/2012:09:53:11 +0400] [localhost/sid#68a898][rid#1cc4d48/initial] (3) [perdir D:/Development/htdocs/test /] 去除每个目录前缀:D:/Development/htdocs/test/user -> user ::1 - - [12/Oct/2012:09:53:11 +0400] [localhost/sid#68a898][rid#1cc4d48/initial] (3) [perdir D:/Development/htdocs/test/] 申请模式 '^/([a-z]+)$' 到 uri 'user'

    ::1 - - [12/Oct/2012:09:53:11 +0400] [localhost/sid#68a898][rid#1cc4d48/initial] (3) [perdir D:/Development/htdocs/test /] 去除每个目录前缀:D:/Development/htdocs/test/user -> user

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

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

    从第一行可以清楚地看出,mod_rewrite 正在剥离开头的“/”,而您得到的是“用户”而不是“/用户”。所以,重写规则应该不带'/',即:

    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 文件中创建。这通常是检查问题所在的最佳方法。

    【讨论】:

    • 我已经完成了所有这些。然而我得到 Not Found The requested URL /rs/user was not found on this server.
    • 奇怪...,它对我有用。我已将 .htaccess 文件放在 test/ 文件夹中。
    【解决方案3】:

    如果你在子文件夹中运行它,你需要在RewriteEngine On之后添加这一行

    RewriteBase /rs
    

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

    AllowOverride All
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-05
      • 2012-05-02
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      相关资源
      最近更新 更多