2

仮想ホストにhttp://dev.example.com/cool/story/broのような URL を書き換えてもらいたい

宛先:
http://dev.example.com/index.php?url=cool/story/bro

次のような既存のファイルを指定しない限り:
http://dev.example.com/images/duck.png


正常に動作しますが、次のような既存のフォルダーを使用する URL がある場合:
http://dev.example.com/images

奇妙なことに、http: //dev.example.com/images/?url=imagesにリダイレクトされます。

いつ書き換えるべきか:
http://dev.example.com/index.php?url=images


これが私の現在のコードです:

<VirtualHost *:80>
        ServerName dev.example.com
        DocumentRoot /var/www/dev/public

        php_flag display_errors 1
        php_value error_reporting 30719

        <Directory "/var/www/dev/public">
                RewriteBase /
                RewriteEngine On
                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteRule ^(.*)$ index.php?url=$1 [L]
        </Directory>
</VirtualHost>

何時間も修正しようとしてきましたが、問題がわかりません。お役に立てば幸いです。

4

2 に答える 2

0

既存のファイルであるパスに加えて、既存のディレクトリであるパスに対して RewriteCond を指定する必要があります。

RewriteBase /
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ index.php?url=$1 [L]
于 2013-05-19T17:23:39.113 に答える
0

私はこの同じ問題の解決策を探しに来ました.@Chris Hendryのコメントは、書き換えログがこれをデバッグするのに非常に役立ちました.

正確ではありませんが、書き換えアクションを追跡できるログに記録することができます。RewriteLog "/path/to/file/rewrite.log" RewriteLogLevel 3 httpd.apache.org/docs/2.2/mod/mod_rewrite.html#RewriteLogLevel – クリス・ヘンドリー

ここに示すように、Apache がスラッシュなしでフォルダーが要求されるたびに末尾のスラッシュを自動的に追加する問題を追跡しました

Apache は、ディレクトリが要求されたことを認識し、「正しい」場所への 301 リダイレクトを引き起こします。

このディレクティブを .htaccess ファイルに追加したときに、問題が修正されました (この場合、vhost 自体で動作するはずです)。

DirectorySlash Off

編集:再度テストする前に、必ずキャッシュをクリアしてください。301 リダイレクトはキャッシュです。

于 2014-03-15T15:42:19.620 に答える