htaccess mod_rewrite HTTP 500错误

时间:2012-09-19 17:03:21

标签: apache .htaccess mod-rewrite

此特定代码适用于一台服务器,但不适用于另一台服务器。工作的是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>

输入网址备选方案:

  • 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

2 个答案:

答案 0 :(得分: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]

同时使前导斜线可选(/?)。

答案 1 :(得分:0)

出现?:apache1中的regexp无效。避免它解决了这个问题。