2012-09-19 101 views
0

这个特定的代码适用于一台服务器,但不适用于其他服务器。工作的人有Apache2,另一个是Apache1。我怎样才能使它在两个方面都有效?htaccess mod_rewrite HTTP 500错误

<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

回答

0

它出现?:在apache1中不是有效的正则表达式。避免它解决了这个问题。

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] 

而且使前导斜杠可选(/?)。

+0

Negative houston,仍然HTTP 500.甚至没有“RewriteRule^/?(?:[az] {2} /)?。* - p - ([0-9] +)$ page.php?page_id = $ 1 &。%{QUERY_STRING}“.htaccess中的作品。 – tim

+0

@tim您是否有权访问vhost/server config来打开重写日志记录以查看规则是否正在执行?你确定* mod_rewrite是在Apache1.3配置中加载的吗? (它们可能位于与Apache2不同的地方) –

+0

不,很遗憾没有这样的访问。由于更简单的规则起作用,所以加载了mod重写。此外,不应该阻止HTTP 500,如果它没有加载? – tim