Apache Rewrite规则无法按预期工作

时间:2013-07-25 01:20:32

标签: apache .htaccess zend-framework mod-rewrite ubuntu

我有两个apache服务器都有相同的设置,我克隆了apache配置文件,并且只更改了ServerName部分。当我输入mysite.com/somestuff时,它应该重写为index.php,它会在我的旧服务器上执行,但不是我的新服务器。当我使用mysite.com/index.php/somestuff时,我确保.htaccess存在,但是就像我的第一个网站一样,我需要它与mysite.com/somestuff合作。

我真的把头靠在墙上这里是我的.htaccess和apache配置文件

#.htaccess file
<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On

    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^app\.php(/(.*)|$) %{CONTEXT_PREFIX}/$2 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .? - [L]

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]
    RewriteRule .? %{ENV:BASE}index.php/ [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 302 ^/$ /index.php/
    </IfModule>
</IfModule>
<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

现在为我的apache配置

<VirtualHost *:80>
        ServerAdmin user@host.com
        ServerName mysite.com
        DocumentRoot /home/richardw/www/halogen/web
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /home/richardw/www/halogen/web/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

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

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

如果这是一个重新发布,我道歉,但我一直在搜索,我将要失去它。

2 个答案:

答案 0 :(得分:2)

  

当您转到http://mysite.com/时,是否重定向到http://mysite.com/index.php/

如果发生这种情况,则表示新服务器中未加载mod_rewrite。您需要确保它已加载到您的apache的服务器配置文件中。有关如何使用apache的一些说明,请参阅this answer

重定向工作的原因是因为这个容器:

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 302 ^/$ /index.php/
    </IfModule>
</IfModule>

这基本上说“如果mod_rewrite 已加载”,那么如果加载了mod_alias,它会将根请求重定向到/index.php/。因此,如果重定向正在发生,则mod_rewrite 已加载。

答案 1 :(得分:0)

您是否尝试评论或删除此行
Options +FollowSymlinks
你的.htaccess?