Mod rewrite Mango博客的URL重写问题(404错误)

Mod rewrite Mango博客的URL重写问题(404错误),mod-rewrite,coldfusion,apache2,Mod Rewrite,Coldfusion,Apache2,我正在一台运行Apache2Httpd和Tomcat6以及Railo3.1.2的Ubuntu服务器上建立一个Mango博客实例。在我开始尝试为博客URL实现URL重写之前,我能够设置所有内容 我使用了和帖子的组合来获得重写规则。我的网站设置如下: {webroot}/.htaccess RewriteEngine on RewriteBase / # archives rule must be located before page rule for paging to work correct

我正在一台运行Apache2Httpd和Tomcat6以及Railo3.1.2的Ubuntu服务器上建立一个Mango博客实例。在我开始尝试为博客URL实现URL重写之前,我能够设置所有内容

我使用了和帖子的组合来获得重写规则。我的网站设置如下:

{webroot}/.htaccess

RewriteEngine on
RewriteBase /
# archives rule must be located before page rule for paging to work correctly
RewriteRule archives/(.*)$              archives.cfm/$1 [PT,L,NC]
RewriteRule page/(.*)$                  page.cfm/$1 [PT,L,NC]
RewriteRule post/(.*)$                  post.cfm/$1 [PT,L,NC]
RewriteRule author/(.*)$                author.cfm/$1 [PT,L,NC]
{apache home}/sites enabled/sitename

<VirtualHost *:80>
        ServerAdmin *******

        DocumentRoot /var/www/******/www
        ServerName mango.*****.com
        DirectoryIndex index.cfm

        <Directory /var/www/*******.com/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride all
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog /var/log/apache2/error-*******_com.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access-********_com.log combined

        ProxyPreserveHost Off
        ProxyPassMatch ^/(.+\.cf[cm])(/.*)?$ ajp://********.com:8009/

</VirtualHost>

服务器管理员*******
DocumentRoot/var/www/*****/www
ServerName mango.*****.com
DirectoryIndex.cfm
选项索引跟随符号链接多视图
允许超越所有
命令允许,拒绝
通融
ErrorLog/var/log/apache2/error-********u com.log
#可能的值包括:调试、信息、通知、警告、错误、临界值、,
#警惕,埃默格。
日志级别警告
CustomLog/var/log/apache2/access-***********u com.log合并
代理主机关闭
ProxyPassMatch^/(.+\.cf[cm])(/.*)?$ajp://*********.com:8009/

当我在网站上通过/post/hello-world访问博客帖子时,我得到一个404错误。如果我去/post.cfm/hello-world,帖子就会出现。我尝试了针对a的重写规则,这表明重写应该可以正常工作。我对重写非常陌生,因此如果这是一件简单的事情,我很抱歉。

尝试将您的重写规则移动到VirtualHost块。我遇到了一些奇怪的问题。htaccess在重写时无法正常工作

我可能是错的,但我认为这就是发生的事情

Apache将查找不存在的/post/,并返回404。如果它存在于/post/中,它将运行.htaccess,但它没有

如果重写规则位于httpd.conf文件中VirtualHost块内的目录块中,那么Apache知道如何重定向而不是查找/post/

<VirtualHost *:80>
    ServerAdmin *******

    DocumentRoot /var/www/******/www
    ServerName mango.*****.com
    DirectoryIndex index.cfm

    <Directory /var/www/*******.com/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride all
            Order allow,deny
            allow from all

            RewriteEngine on
            RewriteBase /
            # archives rule must be located before page rule for paging to work correctly
            RewriteRule archives/(.*)$              archives.cfm/$1 [PT,L,NC]
            RewriteRule page/(.*)$                  page.cfm/$1 [PT,L,NC]
            RewriteRule post/(.*)$                  post.cfm/$1 [PT,L,NC]
            RewriteRule author/(.*)$                author.cfm/$1 [PT,L,NC]
    </Directory>

    ErrorLog /var/log/apache2/error-*******_com.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access-********_com.log combined

    ProxyPreserveHost Off
    ProxyPassMatch ^/(.+\.cf[cm])(/.*)?$ ajp://********.com:8009/

服务器管理员*******
DocumentRoot/var/www/*****/www
ServerName mango.*****.com
DirectoryIndex.cfm
选项索引跟随符号链接多视图
允许超越所有
命令允许,拒绝
通融
重新启动发动机
重写基/
#归档规则必须位于页面规则之前,才能使分页正常工作
重写规则存档文件/(*)$archives.cfm/$1[PT,L,NC]
重写规则第页/(*)$page.cfm/$1[PT,L,NC]
重写规则post/(.*)$post.cfm/$1[PT,L,NC]
重写规则作者/(*)$author.cfm/$1[PT,L,NC]
ErrorLog/var/log/apache2/error-********u com.log
#可能的值包括:调试、信息、通知、警告、错误、临界值、,
#警惕,埃默格。
日志级别警告
CustomLog/var/log/apache2/access-***********u com.log合并
代理主机关闭
ProxyPassMatch^/(.+\.cf[cm])(/.*)?$ajp://*********.com:8009/

您的问题可能与您的基础有关。当我将您的示例加载到测试服务器上时,我在Apache的错误日志中看到,由于我使用的环境,使用RewriteBase对我有效;但是,在您的情况下使用/可能不会创建正确的路径

在web服务器错误日志中,查看当它说找不到404错误时生成的路径。很可能,它会这样说:

[21/May/2011:17:29:20 +0000] [error] [client #.#.#.#] File does not exist: /path/to/something/not/quite/right/post.cfm/hello_world
按照路径进行操作,以确保它实际将您引导到*.cfm文件所在的实际服务器位置。然后只需修改重写库,使其成为正确的路径


希望有帮助。

将.htaccess文件放入:

Options -Multiviews

对我来说,Mango URL重写是一个黑魔法,每次新安装我都会遇到新的问题…理论上这应该不会太难。它实际上只是从URL中删除.cfm。当我在VirtualHost配置的末尾添加我的重写时,它首先给我一个错误,
RewriteBase:仅在每个目录配置文件中有效
,当我对它进行注释时,我现在在尝试访问重写的url(如/post/hello worldworldmove)时收到一个400错误,将重写规则代码移动到#moveHere中。更新了原始的w/新代码。当我将重写移动到目录标记中时,仍然会出现404错误。唯一看起来与重写相关的错误是
协商:发现的文件匹配请求:/var/www/*****/www/post(无法协商)
这肯定与您遇到的问题有关。这对我来说是一个新的错误,但可能与mod_协商和它所寻找的文件句柄类型有关?也许可以尝试禁用mod_协商(如果您的web服务器已经启用),看看它是否会影响错误的性质。这肯定是一个mod_协商相关的问题。谢谢您的回答。你介意再解释一下为什么这个选项可以解决这个问题吗?当然可以。此指令关闭协商。有关更多信息,请访问并查找“多视图”。@akond我也不明白为什么他在服务器级别有多视图…::选项索引跟随符号链接多视图