1

使用完全相同的 .htaccess 文件,我的本地 LAMP 服务器(通过 mamp pro)和生产服务器的行为不同。我想有一个不同的配置处于危险之中,但是哪一个呢?

在我的本地服务器上,http: //domain.com/section/item/ 正确重定向到http://domain.com/index.php?section= $1&item=$2

在我的生产服务器上, http: //domain.com/section/item/ 可以访问 http://domain.com/section/item/index.html

我该怎么做才能使生产服务器表现得像开发服务器?

这是 htaccess 文件内容,以防万一。

<IfModule mod_rewrite.c>

RewriteEngine on
Options +FollowSymLinks

#--------------------------------------------
# PRETTY URLS
#--------------------------------------------


# if the following conditions are met, SKIP the rewriteRules.
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule . - [L]

# Externally redirect to add missing trailing slash
RewriteRule [^/]$ %{REQUEST_URI}/ [R,L]

# SIX PARAMS
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ index.php?section=$1&item=$2&menu=$3&content=$4&id=$5&title=$6 [NC,L,QSA]

# FIVE  PARAMS
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ index.php?section=$1&item=$2&menu=$3&content=$4&id=$5 [NC,L,QSA]

# FOUR PARAMS
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ index.php?section=$1&item=$2&menu=$3&content=$4 [QSA,L]

# THREE PARAMS : projects/touch/texts/
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?section=$1&item=$2&menu=$3 [QSA,L]

# TWO PARAMS: downloads
RewriteRule ^downloads/([^/]+)/$ index.php?section=downloads&item=$1 [QSA,L]

# TWO PARAMS:
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?section=$1&item=$2 [QSA,L]

# TAG URL : index.php?tag=url+encoded+keyword
RewriteRule ^tag/([\w-]+)/$ index.php?tag=$1 [NC,L,QSA]

# ONE PARAM
RewriteRule ^([\w-]+)/$ index.php?section=$1 [L,QSA]

#--------------------------------------------
# END PRETTY URLS
#--------------------------------------------

</IfModule>
4

2 回答 2

0

是的,两个文件目录结构完全相同

我不知道你是如何完成所有设置的,但是开发和生产之间加载的模块顺序可能不同(长镜头),这可能会影响在 URL 处理中应用模块的顺序管道。它的顺序或类似 mod_autoindex 或 mod_dir 的东西是不同的,因此导致请求在mod_rewrite 有机会做任何事情之前/section/item/得到解决。这意味着这个条件变为真:/section/item/index.html

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule . - [L]

你的其他规则都没有得到应用,因​​此/section/item/index.html得到了服务。

至于如何解决这样的问题,我想您可以尝试在服务器配置中关闭目录索引(通过将其注释掉,无处不在),或者将其设置为它们正在服务的目录中不存在的东西:

DirectoryIndex _index.php
于 2013-09-27T17:31:29.817 回答
0

尝试进行 2 项更改。

在 .htaccess 文件的顶部添加这一行:

DirectoryIndex index.php

然后将您的第一条规则更改为:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

编辑:也试试这个:

Options +FollowSymLinks -MultiViews
于 2013-09-27T17:04:48.937 回答