4


0

.htaccessファイルが相対パスではなく完全なサーバーパスにリダイレクトされるのはなぜですか?

これまでCakePHPで問題が発生したことはありませんが、このサーバーについて奇妙なことがあり、.htaccessファイルのリダイレクトが奇妙に動作する原因になっています。

CakePHPは.htaccessファイルのmod_rewriteを使用して、リクエストを独自のwebrootフォルダーにリダイレクトします。 問題は、リダイレクトで間違ったパスがリストされ、404エラーが発生することです。 リストディレクトリに格納されているCakePHPアプリケーションには、次のような.htaccessファイルがあります。

    RewriteEngine on
    RewriteRule    ^$ app/webroot/    [R=301,L]
    RewriteRule    (.*) app/webroot/$1 [R=301,L]

(* R = 301により外部リダイレクトが発生するため、最後から何が起こっているかを確認できます。 このフラグを実際に省略し、エンドユーザーに透過的な内部リダイレクトを実行する必要があります)

これは、リクエストを http:// hostname.com /〜username / listings /`から `http:// hostname.com /〜username / listings / app / webroot /`にリダイレクトすることになっています。ただし、単に「 `app / webroot / "を最後に追加すると、完全なサーバーパス(` / home / username / public_html / listings / app / webroot / )が追加され、最終的なURL http://が作成されます。 hostname.com / home / username / public_html / listings / app / webroot / `これは明らかに正しくなく、404エラーを引き起こします。

ホスティングは共有ホスティングアカウントで行われるため、設定でできることは制限されます。 私はこれが起こるのを見たことがありません、そして、それが物事のホスティング側から何か間違っていると思っています、しかし、誰かが役に立つ提案を持っているならば、私は同様にホスティング会社にそれらを置くことができます。

3 回答


3


質問の解決策は、cakephpブックのこのhttp://book.cakephp.org/view/37/Apache-and-mod_rewrite-and-htaccess[page]の下部にあります。

_ 多くのホスティングサービス(GoDaddy、1and1)では、Webサーバーは実際に既にmod_rewriteを使用しているユーザーディレクトリから提供されています。 CakePHPをユーザーディレクトリ(http://example.com/~username/cakephp/)、または既にmod_rewriteを利用している他のURL構造にインストールする場合、CakePHPが使用する.htaccessファイルにRewriteBaseステートメントを追加する必要があります。 (/.htaccess、/app/.htaccess、/app/webroot/.htaccess)。 _

プロファイルのpublic_htmlフォルダーからCakePHPもデプロイしました。 上記の3つの.htaccessファイルを変更する必要がありました。 RewriteEngine on`の直後に RewriteBase /〜username / `を.htaccessファイルに追加してください!


0


メインファイルから.htaccessを削除してみてください…​ それは私のために働きました


0


それは非常に簡単でした(uolhost共有ホストを使用):

両方の.htaccessファイルを編集します。

/webroot/.htaccess

/.htaccess

次の行を追加します。RewriteBase /

/webroot/.htaccessファイル全体を次に示します。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]