次のような URL を処理する書き換えルールを正常に作成しました。
modの書き換えと正規表現は次のとおりです。
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([0-9]+)(?:\/)?$ /index.php?p=$1 [L]
RewriteRule ^/?([-a-zA-Z0-9_+]+)(?:\/)?$ /index.php?n=$1 [L]
RewriteRule ^/?([-a-zA-Z0-9_+]+)/([-a-zA-Z0-9_+]+)(?:\/)?$ /index.php?n=$2 [L]
これはうまく機能しますが、問題は、http://example.com/xyz/abcに移動すると、スクリプトは正しい入力 (n=abc) を取得しますが、パスがめちゃくちゃになるため、コード内のすべての相対 URLルートではなく xyz に相対的であるため、壊れています。
これを回避する方法はありますか?上記のように、パスを強制的に正しくするために /index.php にリダイレクトしようとしました。正規表現とコードで長い 1 日を過ごした後、私の脳は焼き尽くされています。