从webhost迁移到本地Synology主机后,htaccess无效

时间:2018-06-04 08:55:32

标签: apache .htaccess synology

我有一个托管网站,我使用以下htaccess文件格式化网址,这些都可以。主机使用Apache,但遗憾的是没有显示版本号。我认为这是2.4。

Options +FollowSymLinks 
RewriteEngine on

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

RewriteRule ^item/([0-9]+)/(.*) /item.php?item=$1&title=$2 [L]
RewriteRule ^category/(.*) /showitems.php?category=$1 [L]
RewriteRule ^search/(.*) /searching.php?options=$1 [L]
RewriteRule ^searching/(.*) /showitems.php?search=$1 [L]
RewriteRule ^update/(.*) /showitems.php?update=$1 [L]

AddType application/x-httpd-lsphp .html .htm .shtml

我使用Apache 2.4将整个站点复制到我当地的Synology Diskstation。

类别,搜索和更新的重写网址工作正常。但是,“搜索”和“项目”的网址会返回404错误。 “搜索”是“searching.php”

中的标题重定向

项目是一个奇怪的意义,它在结果URL中使用2 get params。在试错模式中,我将其更改为:

RewriteRule ^item/(.*) /item.php?item=$1 [L]

然而,这也不起作用

RewriteRule ^itemitem/(.*) /item.php?item=$1 [L]

工作正常,这真让我困惑。当我再次添加第二个参数时,最后一次重写也不起作用。

我错过了什么?或者,有没有更好的方法来处理这些重写,我可以尝试?

1 个答案:

答案 0 :(得分:0)

CBroe对您的帖子发表的评论是正确答案。 更具体一点,并解释为什么如果你的Apache 2.x服务器启用了MultiViews,它会尝试为你匹配目录名称,代表你的文件名,以使用户体验更容易。

但是,在许多情况下,这可能会混淆您期望非常具体的正则表达式的重写规则。

在大多数情况下,只需禁用MultiView即可逃脱。 您可以通过添加.htaccess文件中的选项来禁用它。

-MultiViews

请注意,如果AllowOverrive目录不允许这样做,那么您需要更改该vhost /目录的Apache配置文件以包含-MultiViews选项。

您可以在此处阅读有关MultiViews的更多信息:

http://httpd.apache.org/docs/current/content-negotiation.html

另一件事,也许更正确的方法是更好地构建你的重写规则,并利用“!-f”或“!-d”参数之类的东西,让你的规则知道你不想包括文件或目录等等。

在MultiViews上的旁注,即使它非常花哨和neato - 如果你正在运行一个生产站点,请知道MultiViews会产生大量不需要的磁盘I / O,并且可能会降低Apache服务器的性能一点点!所以禁用MultiViews总是很好的做法。