.htaccess在服务器上表现不同

时间:2014-05-30 12:57:23

标签: php apache .htaccess mod-rewrite httpd.conf

所以我有一个网站成功地将url参数重写为一个干净的网址,但在另一台服务器上,.htaccess不起作用。

<IfModule mod_rewrite.c>
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
  RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]

  RewriteCond %{HTTP_USER_AGENT} libwww-perl.*
  RewriteRule .* – [F,L]

  RewriteCond %{SCRIPT_FILENAME} !-d
  RewriteCond %{SCRIPT_FILENAME} !-f

  RewriteRule ^project/(\d+)*$ ./project.php?project=$1
</IfModule>

什么不起作用是最后一行。我需要something.com/project/star-trek作为用户点击链接时获得的网址,但是在看到干净网址的同时,它们会被something.com/project.php?project=star-trek提供。

在Server1上,上面的代码完美地运行,但Server2上的相同代码却没有。 RewriteRule可以在Server2上运行,因为我们可以使用

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

这可以删除&#39; .php&#39;在Server2和Server1上。

我确实检查过httpd.conf中是否允许.htaccess并且我已将所有AllowOverwrite更改为All

我在这里不知所措,并希望得到任何帮助。谢谢

1 个答案:

答案 0 :(得分:1)

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]

    RewriteCond %{HTTP_USER_AGENT} libwww-perl.*
    RewriteRule .* – [F,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^project/(.*?)/?$ ./project.php?project=$1 [L]
</IfModule>

这适用于我的机器,在原始脚本中我注意到的是:

  • RewriteEngine未启动(但它可能位于 httpd.conf httpd-vhosts.conf
  • RewriteRule仅匹配数字且不允许使用尾部斜杠:^project/(\d+)*$

我让RewriteRule成为一个不合适的通配符匹配,不包括尾随斜杠;在Apache 2.4下的.htaccess文件中工作。