0

この特定のコードは、あるサーバーでは機能しますが、他のサーバーでは機能しません。動作中のものには Apache2 があり、もう一方には Apache1 があります。両方で動作させるにはどうすればよいですか?

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteBase /

  # SEO translation
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(?:[a-z]{2}/)?.*-p-([0-9]+)$ page.php?page_id=$1&%{QUERY_STRING}
  RewriteRule ^(?:[a-z]{2}/)?(.*) $1?%{QUERY_STRING}
</IfModule>

入力 URL の代替:

  • www.domain.com/some-fancy-title-p-10
  • www.domain.com/en/some-fancy-title-p-10
  • www.domain.com/sv/some-fancy-title-p-10
4

2 に答える 2

0

条件を複製してみてください。それらは直後の単一にのみ適用されるRewriteRuleため、両方のルールで複製する必要があります。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(?:[a-z]{2}/)?.*-p-([0-9]+)$ page.php?page_id=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(?:[a-z]{2}/)?(.*) $1 [L,QSA]

また、先頭のスラッシュをオプションにします ( /?)。

于 2012-09-19T17:06:38.440 に答える
0

?: apache1 では有効な正規表現ではないようです。それを避けることで問題は解決します。

于 2012-10-04T00:41:14.443 に答える