所以我有一个网站成功地将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
我在这里不知所措,并希望得到任何帮助。谢谢
答案 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>
这适用于我的机器,在原始脚本中我注意到的是:
^project/(\d+)*$
我让RewriteRule成为一个不合适的通配符匹配,不包括尾随斜杠;在Apache 2.4下的.htaccess文件中工作。