4

私は次の構造を持っています

/var/www/mysite/public/
/var/www/mysite/api/

両方のディレクトリで、次のようにURLを書き換えるために.htaccessが設定されています。

dev.domain.com/example/ => dev.domain.com/index.php?token=example

dev.domain.com/api/example => dev.domain.com/index.php?token=example

私のapacheconfはこのように見えます

...
<VirtualHost *:80>
   Servername dev.domain.com
   DocumentRoot /var/www/mysite/public/
   Alias /api/ "/var/www/mysite/api/"
   <Directory "/var/www/mysite/api/">
       Options Indexes FollowSymLinks
   </Directory>
</VirtualHost>
...

dev.domain.com/api/は正常に機能しますが(www / api / index.phpを呼び出します)、dev.domain.com / api / example /はパブリックサイト(クエリ文字列token=を使用してwww/ public / index.phpを呼び出します)を呼び出します。例)。

私は、apacheディレクティブAliasがサブディレクトリもリダイレクトしていると思いましたが、明らかにそうではありません。誰かが私がどこが間違っているのか教えてもらえますか?

4

2 に答える 2

5

したがって、これは書き換えの問題でした。エイリアスディレクトリは一致するパターンになってはいけません。

これが最終的な設定です:apache設定ファイル

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

        Alias /api/ /var/www/mysite/api/
        <Directory /var/www/mysite/api/>
             Options FollowSymLinks -Indexes   
             AllowOverride all
        </Directory>
</VirtualHost>
...

および.htacessファイル/api/ディレクトリ

Options FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301]

RewriteRule ^(.*)/(.*)/$ /api/index.php?object=$1&collection=$2 [QSA,L] 
RewriteRule ^(.*)/$ /api/index.php?object=$1 [QSA,L]

お時間をいただきありがとうございます@freedev。

于 2012-11-30T10:41:53.643 に答える
3

mysite / api /の場合、絶対パスを使用する必要があります。次の書き換えを試してください。

RewriteRule ^api/(.*)/(.*)/$ /api/index.php?object=$1&collection=$2 [QSA,L] 

RewriteRule ^api/(.*)/$ /api/index.php?object=$1 [QSA,L]

期待どおりに機能しないものがある場合は、リライトプロセスをデバッグして、リライトログを有効にすることができます。

RewriteLog "/var/apache/logs/rewrite.log"
RewriteLogLevel 7 

サーバーの速度が大幅に低下するため、開発環境でのみrewritelog構成を使用するように注意してください。

于 2012-11-30T02:56:46.097 に答える