0

Apache mod_rewrite モジュールを使用して、ディレクトリ /docs 内のすべての URI を /docs/index.php に書き換えようとしています。

URI はディレクトリ構造として存在しません。これは、URI を終了するものに書き換える場合には必要ないと思います。

エラーが発生しています:

「要求された URL /docs/view/my_doc は、このサーバーで見つかりませんでした。」

これらは私の書き換えルールです:

   RewriteEngine On
   RewriteCond %{REQUEST_URI} ^docs/([a-z]+)/([A-Za-z0-9_-]+)/?$
   RewriteRule ^(.*)$ http://%{HTTP_HOST}/docs/index.php?action=$1&target=$2 [QSA,L]

httpd.confで構成を行っています。また、マルチ v-host セットアップを使用しています。

私の問題は何ですか?どうすれば解決できますか?

CentOS 6.2 で Apache/httpd を使用しています


アップデート

私のVirtualHostも含めます:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName www.smicloud.org
    ServerAlias *.smicloud.org
    VirtualDocumentRoot /var/www/html/www.smicloud.org
    ExpiresActive On
    ExpiresDefault "access plus 14 days"
    # insert logging config, anything else you need..
    #Define FileEtag so it doesnt use node
    FileETag MTime Size
    <Directory /var/www/html/>
        Order Allow,Deny
        Allow from all
        # Get rid of this if you need to allow htaccess files:
        AllowOverride None
    </Directory>
        RewriteEngine On        
        RewriteRule ^docs/([a-z]+)/([A-Za-z0-9_-]+)/$ /docs/index.php?action=$1&target=$2 [QSA,L]
</VirtualHost>
4

2 に答える 2

0

これはうまくいくはずです

RewriteEngine On
RewriteRule ^docs/([a-z]+)/([A-Za-z0-9_-]+)/$ /docs/index.php?action=$1&target=$2 [QSA,L]
于 2012-09-14T10:28:41.237 に答える
0

わかりました、@donaldsの提案(実際に以前に試しました)を使用して、それを修正するために私がしなければならなかったことがいくつかありました:

1 - 「?」が必要だった RewriteRule の正規表現の最後に:

^/docs/([az]+)/([A-Za-z0-9_-]+)/?$

次に、アドレスの末尾に「/」を付けるかどうかを選択できます。

2 - RewriteRule の正規表現の先頭に「/」を追加する必要がありました。すなわち:

^/docs/([az]+)/([A-Za-z0-9_-]+)$

3 - 「http://%{HTTP_HOST}/」の部分を新しい URI に追加する必要もありました。

http://%{HTTP_HOST}/docs/index.php?action=$1&target=$2 [QSA,L]

これは私が最終的に得たものです:

RewriteRule ^/docs/([az]+)/([A-Za-z0-9_-]+)$ http://%{HTTP_HOST}/docs/index.php?action=$1&target=$2 [QSA,L]

おそらく、%{HTTP:HOST} を追加する必要があったのは、それが複数の仮想ホストのセットアップだからです。

于 2012-09-14T12:24:44.263 に答える