【发布时间】:2014-07-20 05:58:48
【问题描述】:
所以我有一个网站成功地将 url 参数重写为干净的 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 成为用户在单击链接时获得的 url,但是在看到干净的 url 的同时提供了 something.com/project.php?project=star-trek。
在 Server1 上,上面的代码可以完美运行,但在 Server2 上的相同代码却不能。 RewriteRule 确实适用于 Server2,因为我们可以使用
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
这确实可以删除 Server2 和 Server1 上的“.php”。
我确实检查了 httpd.conf 中是否允许 .htaccess,并且我已将所有 AllowOverwrite(s) 更改为 All
我在这里不知所措,希望能提供任何帮助。谢谢
【问题讨论】:
-
除非我遗漏了什么,看起来你源代码中的
href可能是/project.php?project=star-trek...并且因为/project.php是 一个文件,它不满足RewriteConds 的-d和-f条件? -
没有href是/project/star-trek,但是服务器需要提供project.php?project=star-trek。就像大多数 CMS 从 index.php 中运行所有内容并根据 URL 参数对其进行更改但显示 something.com/some/page
-
这就是我猜你想要的只是确保...
^project/(\d+)*$不是\d数字字符(例如 [0-9] 和 8859-1)?至少在 RegExp 和更新版本的 Apache 中;我认为 Apache 1.3 不支持完整的 Perl RegExps。 -
哦...等一下...
RewriteEngine On行在哪里? -
它在 .htaccess 的早期版本中。我们正在使用 HTML5 Boilerplate .htaccess
标签: php apache .htaccess mod-rewrite httpd.conf