3

私のウェブサイトの .htaccess ファイルには次のものがあります

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteRule ^(.*)$ profile.php?membername=$1 [L]
    RewriteRule ^poem/(.*)/?$ poem.php?id=$1 [L,NC]
</IfModule>


# Works
RewriteRule ^(.*)$ profile.php?membername=$1 [L]
# Does not work
RewriteRule ^poem/(.*)/?$ poem.php?id=$1 [L,NC]

すべてをこのベローに変更すると、結果が逆になります。

# No longer works:
RewriteRule ^(.*)$ profile.php?membername=$1 [L]
# Now works:
RewriteRule ^poem/(.*)/?$ poem.php?id=$1 [L,NC]


<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{SCRIPT_FILENAME} -f
    RewriteCond %{SCRIPT_FILENAME} -d
    RewriteRule ^(.*)$ profile.php?membername=$1 [L]
    RewriteRule ^poem/(.*)/?$ poem.php?id=$1 [L,NC]
</IfModule>

どうしたの?何も思いつきません。

4

1 に答える 1

2

ここで行う必要があるのは、ネガティブ テストをオンのままにしREQUEST_FILENAME、ルールの順序を逆にすることです。それ以外の場合、より一般的なもの^(.*)は常に最初に一致し、上書きし^poem/ます。

<IfModule mod_rewrite.c>
    RewriteEngine On
    # Negative conditions here...
    # Using REQUEST_FILENAME instead of SCRIPT_FILENAME
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    # Match the more specific rule first...
    RewriteRule ^poem/(.*)/?$ poem.php?id=$1 [L,NC]

    # Match the generic rule last.
    RewriteRule ^(.*)$ profile.php?membername=$1 [L]
</IfModule>
于 2013-03-01T01:08:01.133 に答える