0

所以我在这件事上花了太多时间——有点绝望。

.ht 访问:

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

/etc/apache2/sites-available/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 它会按预期工作。

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

4

3 回答 3

0

看起来你忽略了'/'

试试这个

RewriteRule ^/submit/?$ submit.php [NC,L]
于 2012-12-18T10:36:19.090 回答
0

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

于 2012-12-20T03:52:54.783 回答
0

你的 RewritRule 是

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

我认为这不会按原样工作,因为它意味着'匹配/提交到 submit.php 所以如果 url 是www.xyz.com/submit它将被重定向为www.xyz。comsubmit.php偏离课程这将导致“400 Bad request”,因为您的 apache 服务器不知道如何处理该请求。

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

 Options +FollowSymLinks
 RewriteEngine On
 RewriteRule ^/submit/?$ /submit.php
于 2012-12-20T15:48:06.777 回答