mod_rewrite不使用子域

时间:2012-12-17 12:57:53

标签: linux apache mod-rewrite

所以我花了太多时间在这上面 - 有点绝望。

htaccess的:

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^submit/?$ submit.php [NC,L]

的/ etc / apache2的/位点可用/ applicapple:

<VirtualHost *:80>
    ServerAdmin support@perpetualcontrast.com

    DocumentRoot /var/www/applicapple
    ServerName applicapple.localhost
    <Directory /var/www/applicapple/>
            Options Indexes FollowSymLinks MultiViews
            RewriteEngine On
            AllowOverride All
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            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>

submit.php肯定存在。 访问applicapple.localhost / submit:

使用目录中的submit.php,我得到The requested URL /submit was not found on this server.

如果我删除submit.php,我会收到The requested URL /submit.php was not found on this server.

如果我访问localhost / applicapple,它会按预期工作。

有人能告诉我这里发生了什么吗?

3 个答案:

答案 0 :(得分:0)

看起来你在忽略'/'

试试这个

RewriteRule ^/submit/?$ submit.php [NC,L]

答案 1 :(得分:0)

问题是Apache中的MultiViews选项在目录中搜索具有相同名称的文件,因此如果/submit.php存在,/ submit将被解释为/submit.php。我关闭了这个选项,它现在按预期工作。

答案 2 :(得分:0)

你的RewritRule是

  

RewriteRule ^ / submit /?$ submit.php [NC,L]

我认为它不会起作用,因为它意味着'匹配/提交到submit.php,所以如果网址是 www.xyz.com/submit ,它将被重定向为< strong> www.xyz。 comsubmit.php off-course这将导致'400 Bad request',因为您的apache服务器不知道如何处理请求。

我在我的电脑上测试了配置,只是通过编辑重写规则来重定向到/submit.php而不仅仅是submit.php将解决问题。

 Options +FollowSymLinks
 RewriteEngine On
 RewriteRule ^/submit/?$ /submit.php