まず、達成しようとしているもの: ベースhttp://example.com/subdirでテストしています。これはすべてのサブフォルダ、index.php、および.htaccessの場所です。 (余分なルールを削除)の.htaccessに示すようhtaccess:相対パスが正しく動作しない
私はルールの3つのグループがあります。
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine on
# Convert item/edit/xx -> index.php?p=edit&id=xx
# Convert item/remove/xx -> index.php?p=remove&id=xx
#RewriteCond %{REQUEST_URI} ^/item [NC]
#RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC]
RewriteRule ^item/([a-z]+)/([0-9]+)$ index.php?p=$1&id=$2 [NC,L]
# Convert category/yyyy -> customer/pagination.php?category=yyyy
#RewriteCond %{QUERY_STRING} category=([a-zA-Z\s]+)$
RewriteRule ^customer/category/([a-zA-Z\s]+)$ customer/pagination.php?category=$1 [NC,L]
# Convert action/about -> index.php?p=about
# Convert action/terms -> index.php?p=terms
#RewriteCond %{QUERY_STRING} p=([a-z]+)$
RewriteRule ^action/([a-z]+)$ index.php?p=$1 [NC,L]
</IfModule>
私はそれがコメントしているのでするRewriteCondは、(与えパスが見つかりません)働いていなかった直面した最初の問題すぐに外に出てください。 RewriteRuleは絶対パスで正常に動作します(例:RewriteRule^action /([az] +)$ http://example.com/subdir/index.php?p= $ 1 [NC、L])しかし、これによりブラウザに実際のURLが表示されるため、パス。 最初のリダイレクト後、左のリンクの最初の部分がパスに追加されます。つまり、アクション/約リンクをクリックした後にhttp://example.com/subdirがhttp://example.com/subdir/actionになります。 RewriteBaseを定義するか、URLにスラッシュを付けると状況が悪化します。 私の問題の根本的な原因を突き止めることができる鷲の目を持つ専門家に感謝します。
私は本当にあなたの質問の第2部分を理解していません。エラーの原因となるURLの例と、リダイレクトするパスと、実際にリダイレクトされるパスは何ですか? – Anonymous
例のURLはhttp://example.com/subdir/action/aboutです。クリックすると、[About]ページにリダイレクトされますが、次のリクエストのパスはhttp://example.com/subdir/action/になります。したがって、アクション/用語のリンクをクリックすると、結果のurl = http://example.com/subdir/action/action/termsとなります。余分な「アクション」フォルダがパスに追加されていることに注意してください(http://example.com/subdir/index.php?p=termsにリダイレクトする必要があります)。すべてのリンクは相対BTWです(例:アクション/約。ありがとうございました。 – user2097141