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 回答