0

だから私はこれにあまりにも多くの時間を費やしました - 少し必死になっています.

.htaccess:

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

問題は、同じ名前のファイルをディレクトリで検索するApacheのMultiViewsオプションでした。そのため、/ submit.phpが存在する場合、/submitは/submit.phpとして解釈されます。このオプションをオフにすると、期待どおりに機能します。

于 2012-12-20T03:52:54.783 に答える
0

あなたの RewritRule は

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

/submit を submit.php に一致させることを意味するため、そのままでは機能しないと思います。したがって、URL がwww.xyz.com/submitの場合、www.xyzとしてリダイレクトされます。comsubmit.phpオフコースでは、Apache サーバーがリクエストの処理方法を認識できないため、「400 Bad request」という結果になります。

submit.php だけでなく /submit.php にリダイレクトするように書き換えルールを編集するだけで問題が解決するという私の PC の構成をテストしました。

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

「/」を無視しているようです

これを試して

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