Lionの〜/ Sitesにある.htaccessファイルを使用してURL書き換え(mod_rewrite)を有効にします


13

mod_rewriteをLionで動作させることはできません。.htaccessファイルを使用して、〜/ Sitesでローカルに多くのWebサイトを開発しています。私は10.7.3を使用していますが、httpd.confでPHPを有効にすることを除いて、構成ファイルには触れていません(動作します)。

ここには少なくとも2つの質問がありますが、そこで詳細な解決策は機能しません。私がウェブで見つけた他のソリューションもそうではありません。私は何かバカなことをしているか、何かを見落としているに違いありません。

私は通常のものをすべて試しました:

  1. で、Webサーバー/private/etc/apache2/users/<myusername>.confに変更AllowOverride NoneAllowOverride Allて再起動します

  2. また、に/private/etc/apache2/httpd.conf、のいずれか/すべてのオカレンス(複数可)に変更AllowOverride NoneするとAllowOverride All-私は、これらのディレクティブが発見されているすべてのさまざまな場所でそれを試してみました

  3. 基本的に、値を含む、Options行の上/下のAllowOverride行の値のすべての可能な組み合わせを試してください。Indexes MultiViews FollowSymLinks All

もちろん、このような変更後は常にWebサーバーを再起動します。これは機能しません。きれいなURLはすべて機能しません。404が表示されます-見つかりません。Apacheのエラーログには、「ファイルが存在しません:」エラーが表示されます。そのため、mod_rewriteモジュールはまったく機能していないようです。

mod_rewriteがhttpd.confにロードされていることを確認しました。Lionインストールではデフォルトでそうなっています。

おかしなことは、Lionを実行している新しいマシンに移行するまで、すべてが完全に機能していたことです。つまり、.htaccessファイルのエラーを除外しているのは、以前は機能していたことがわかっているからです。また、.htaccessのエラーである場合、Apacheのerror_logのmod_rewriteモジュールから何らかのエラーメッセージが表示され、少なくともモジュール自体が呼び出されていることがわかります。しかし、これは起きていません。

私は何かを見落としていますか?他の場所で構成設定を変更する必要がありますか?PHPの設定を変更する必要がありますか?指示(MacOSX Lionでmod_rewriteをアクティブにする方法Mac OS Xでmod_rewriteを動作させる方法など)が他の人には機能するのに、私には機能しないのはなぜですか?:)

私はすでにこれに何時間も無駄にしています。どんな助けでも大歓迎です。


ところで、私はMAMPを使いたくありません。以前にMAMPを使用しましたが、すでにシステムにあるMySQLでうまく動作しませんでした。これは、ある頭痛を別の頭痛に置き換えることになるので、感謝しません:)
ニールスハイデンライヒ

ところで、Lion Serverではなく、標準のOS X Lionを使用しています。
ニールスハイデンライヒ

これは質問に答えませんが、Web 開発を行うためにMacのローカル環境と格闘する代わりに、Vagrantのようなものを使用します。これにより、仮想マシン構成を簡単にセットアップおよび管理できます。
ダンJ

回答:


12

/etc/apache2/users/username.confに次のものがあることを確認する必要があります。

<Directory "/Users/username/Sites/">
    Options Indexes MultiViews FollowSymlinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

ここでは、FollowSymlinksとAllowOverrideが不可欠です。あなたはあなたの質問で両方をほのめかしていますが、多分あなたはこれらを正しく連携させて設定しなかったかもしれません。

httpd.confに/private/etc/apache2/extra/httpd-userdir.confも含まれていることを確認してください。デフォルトです。

変更後、Webサーバーを再起動して、変更を有効にします。

それでも問題が解決しない場合は、実際の書き換えルールに問題がある可能性があります。以前にも.htaccessコンテキストでそれらを使用していましたか?.htaccessでは、書き換えルールの正規表現は、先頭のスラッシュなしで、常に.htaccessが存在するディレクトリに対して相対的なリクエストURIと照合されますが、グローバルhttpd.confでは、URIは先頭のスラッシュと一致する必要があり、 Webルートに対する相対。〜/ Sitesのサブディレクトリに.htaccessがあると想定されるため、書き換えルールは、.htaccessが(仮想)ホストのWebルートにある場合とは異なる動作をする可能性があります。

mod_rewriteをデバッグするには、書き換えログを有効にします。/etc/apache2/httpd.confで有効にする必要があります。

RewriteLogLevel 3
RewriteLog /path/to/rewrite.log

ゲリーに感謝します。はい、試しました。もう一度試してみました。残念ながら機能しません。.htaccessを変更したことはありません。以前のように、〜/ Sites / ...にあります。これはあまりにもイライラする:(
ニールスハイデンライヒ

上記で修正したように、書き換えログを有効にしてみてください。
ジェリー

わかりました。mod_rewriteの問題ではないようです。完全に無視されるのは.htaccessファイルです。ジャンクを入れることができ、エラーメッセージは表示されません。したがって、Apacheはそれをロードしていません。私は許可をチェックしました、彼らは大丈夫です(ファイルは誰でも読める)変更せずに実行可能にしようとしました。
ニールスハイデンライヒ

.htaccessを/ Library / WebServer / Documentsに配置し、「localhost」を開いてテストすると、期待どおりに機能します。「〜/サイト」では機能しません。
ニールスハイデンライヒ

クレイジーなことをして、ログイン名「testitester」で2番目のユーザーアカウントを作成しました。そのユーザーの.confでAllowOverrideをAllに設定します。そのユーザーのサイトフォルダーにジャンクを含む.htaccessを配置しました。localhost /〜testitesterにアクセスすると、予想どおり500エラーが表示されます。
ニールスハイデンライヒ

1

オプションの追加+ FollowSymLinksはうまくいきました

Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteRule

それは何をしているのOptions +FollowSymLinksですか?私はそれが私のために働くその行を追加するだけです
-Kannika

1

正しくセットアップされたVirtualHostの下の〜/ Sitesディレクトリ内のサブフォルダーで、.htaccessファイルが完全に無視されるという同様の問題が発生していました。

最後の1時間をさまざまな構成ファイルで遊んで、さまざまな場所でAllowOverride Allを設定すると、Finderの.htaccessファイルのように見えますが、実際には.htaccessファイルが.htaccess.txtファイルであることがわかりました。拡張機能が非表示。

.htaccessファイルを確認して変更するには、ファイルを右クリックして[情報を見る]を選択し、最後に、先頭にある拡張子(たとえば私が持っている拡張子)を必ず削除します。

そして今、それは動作します!


1

.htaccessエントリの下で私のために修正

Options Indexes FollowSymLinks


<ifModule mod_rewrite.c>

RewriteEngine On
#RewriteBase /~charles/Sites/Timesheet/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L]


</ifModule>

0

.htaccessを/ Library / WebServer / Documentsに配置して、「localhost /」を開きます。それをテストするには、期待どおりに動作します。「〜/サイト」では機能しません。ニールス・ハイデンライヒに感謝します!


-1

入力する場合:/ Users / username / app_name

/はWebサーバーのルートを示します。

「localhost /」

リライトで/〜username / app_nameを使用すると、動作するはずです。


1
始まるパスは/、常にApacheの絶対パスです(のhttp.confにウェブサーバのルートの定義を参照<Directory "/Library/WebServer/Documents">
nohillside
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.