1

我已经在 stackoverflow 上看到过这个问题被问过/回答了几次,但我找不到任何适合我的解决方案。我确定这是我误解 mod rewrite 的工作原理的一个案例。

我正在尝试重写:

node/45/done/sid/ 到 node/45/done?sid=

我正在使用 Drupal,所以已经有一些 mod 重写条目(见下文)可能会干扰我见过的其他解决方案。对于上面的任何解决方案,我应该把它放在哪里?

<IfModule mod_rewrite.c>
  RewriteEngine on

  RewriteRule "(^|/)\." - [F]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^ index.php [L]

  <IfModule mod_headers.c>
    RewriteCond %{HTTP:Accept-encoding} gzip
    RewriteCond %{REQUEST_FILENAME}\.gz -s
    RewriteRule ^(.*)\.css $1\.css\.gz [QSA]

    RewriteCond %{HTTP:Accept-encoding} gzip
    RewriteCond %{REQUEST_FILENAME}\.gz -s
    RewriteRule ^(.*)\.js $1\.js\.gz [QSA]

    RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1]
    RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1]

    <FilesMatch "(\.js\.gz|\.css\.gz)$">
      Header set Content-Encoding gzip
      Header append Vary Accept-Encoding
    </FilesMatch>
  </IfModule>
</IfModule>
4

1 回答 1

0

由于正常的“RewriteRule ^ index.php [L]”规则具有 [L] 标志,因此不会再执行其他规则。因此,您需要在该规则之前添加您的规则。"RewriteRule "(^|/)." - [F]" 行是一项安全预防措施,因此我会在此之后立即添加您的规则。我相信如果您不将 [L] 标志添加到您的规则中,它将落入默认规则。

于 2012-10-28T20:25:18.053 回答