We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 15611
    • 19 Posts
    kenと申します。お世話になっております。
    現在、public_html以下にmodxをインストールし、公開しているわけですが、フレンドリーURLをONにしているため、.htaccessをpublic_html/以下に置いています。
    ただ、その際public_html/test/.htaccessなどというように、modxのインストールディレクトリより下にあるディレクトリの.htaccessがうまく働かず、そのディレクトリにアクセスするとmodxの404エラーを返してしまい、困っております。

    public_html/test/.htaccessの.htaccessをなくせば、test/にアクセスできますが、BASIC認証を使いたいため、なんとかできないかと悩んでいるのですが、public_html/.htaccess(modxインストール時についてくるやつ)に、Directoryなどを使って、該当ディレクトリを指定し、そこにBASIC認証のコードを書いても、modxのトップ(public_html/)にアクセスすると500エラーを返してしまい、エラーになってしまうので、ご助言を頂きたく投稿させて頂いた次第です。

    自力で解決できず申し訳ありませんが、どなたかうまくいったかたがいらっしゃいましたら、ご教授いただけると助かります。宜しくお願いします。
      • 33488
      • 429 Posts
      こんにちは、
      RewriteCondに下のようなのを追加したらいけるかも

      RewriteCond %{REQUEST_URI} !^test/.*

        • 15611
        • 19 Posts
        kenです。
        zeroさん、有難うございます。

        RewriteCondに下のようなのを追加したらいけるかも

        RewriteCond %{REQUEST_URI} !^test/.*
        ということで、

        RewriteEngine On
        RewriteBase /
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_URI} !^test/subdir/.*
        RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]


        としたり(testの中のあるディレクトリに.htaccessが入っているので)、
        RewriteCond %{REQUEST_URI} !^test/.*
        

        としてみましたが、どちらでもmodxの404が返ってしまいますね。

        {REQUEST_URI}だけでなく、{REQUEST_FILENAME}でも試しましたが、だめでした。

        以前modxインストールディレクトリにある.htaccessを有効にさせ、その配下にあるとあるディレクトリ(/test)にはmodxのrewriteを有効にさせたくなかったため、
        その配下にある.htaccessに、
        Satisfy Any
        Allow from all

        とだけ書いた場合は、.htaccessが無効になったので、BASIC認証まわりをよく見れば、何かいい案が浮かぶかもしれません。

        色々試してみます。何か進展しましたらご報告させていただきます。
          • 15611
          • 19 Posts
          kenです。お世話になっております。

          配下にあるディレクトリの.htaccessで、コメントアウトを使い原因を特定してみたのですが、
          require valid-user

          を入れるとどうも404を返してしまうようです。

          AuthUserFile、AuthGroupFile、AuthName、AuthTypeはどれを有効にしても問題ありませんでした。
          また、Directoryもだめみたいですね。

          その際、RewriteEngine Offも追加してみましたが、変化はありませんでした。
          相変わらず問題は解決しませんが、もう少し頑張ってみます。
            • 28073
            • 164 Posts
            こんばんわです。

            これはtest/直下はBASIC認証つきのMODxのコンテンツとして扱いたいのでしょうか?
            実際に確認はしてないのですが、こんな感じでどうでしょうか…。

            public_htmlの直下。

            RewriteEngine On
            RewriteBase /
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteCond %{REQUEST_URI} !^/test/
            RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
            


            public_html/testの直下。

            
            **認証の設定をここに**
            
            RewriteEngine On
            RewriteBase /
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
            


            やっている事はpublic_htmlの.htaccessは/testディレクトリ直下をrewriteの対象から外します。
            /testディレクトリの.htaccessでBASIC認証かけたあと、rewriteさせます。
            (こちらに「RewriteCond %{REQUEST_FILENAME} !-d」行があるとダメそうなので、覗いてます)

            確認は全然やってないので動かなかったらすいません…。
              • 15611
              • 19 Posts
              soushiさんありがとうございます。

              これはtest/直下はBASIC認証つきのMODxのコンテンツとして扱いたいのでしょうか?
              いえ、test/test2/以下をBASIC認証つきの普通のコンテンツとして扱えればよいのです。

              なので、modxのRewriteさえ回避できれば、問題ないはずなのですが、どうもうまくいきません。

              RewriteCond %{REQUEST_URI} !^/test/

              これも試しましたが、ダメでした。

              RewriteCond %{REQUEST_URI} !^/test/test2
              RewriteCond %{REQUEST_URI} !^/test/test2/.*
              RewriteCond %{REQUEST_URI} !^/test/test2/
              RewriteCond %{HTTP_REFERER} !^http://example.org/test/test2/.*$ [NC]


              あたりも試しましたが、ダメでした。相変わらずmodxの404を返してしまいます。これではまだmodxのrewriteが適用されているということですよね?
              そもそもmodxよりapacheの話ですよね。申し訳ないです。

              http://example.org/test/test2/test.php
              にアクセスした際に、認証をきかれればよいのですが、なかなか一筋縄ではいきません。
              なんか違うところでひっかかっているかもしれないので、ほかのところも見てみます。