godaddy - htaccess条件不起作用

时间:2012-04-14 16:50:53

标签: .htaccess mod-rewrite

我在localhost上有一个mod重写,但在godaddy共享主机上没有。

Options -Multiviews
Options +FollowSymLinks
RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}/WebShop/View/public%{REQUEST_URI} -f
RewriteRule ^(.*)$ WebShop/View/public/$1 [L]

RewriteRule ^(.*)$ entryPoint.php [QSA,L]

问题在于RewriteCond部分。它无法在子文件夹中找到现有文件。我尝试了绝对路径,相对路径,重写基础的一切,但它们都没有奏效。 Godaddy没有授予重写权限的权限......任何想法如何解决这个问题?

修改

htaccess在子文件夹中,在文档根目录中是一个htaccess,它将请求按域拆分为子文件夹:

Options -Multiviews
Options +FollowSymLinks

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_HOST} ([^\.]+\.[^\.]+)$
RewriteRule ^(.*)$ %1/$1 [L,QSA]

真正的问题是,子文件夹的htaccess中的%{REQUEST_URI}也包含子文件夹的名称:S

EDIT2:

好的,我有一个部分解决方案:

Options -Multiviews
Options +FollowSymLinks

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_URI} ^/([^/]+)/(.*)$
RewriteCond %{DOCUMENT_ROOT}/%1/WebShop/View/public/%2 -f
RewriteRule ^(.*)$ entryPoint.php?file=%2 [L]

RewriteRule ^(.*)$ entryPoint.php [QSA,L]

这会打印文件名(如果存在),但这是一种笑话,因为如果我将第二条规则更改为

RewriteRule ^(.*)$ x.php [QSA,L]

然后一切都进入x.php。我想知道为什么mod重写永远不会识别L标志?

(去喝啤酒)

1 个答案:

答案 0 :(得分:0)

这可能是因为某种奇怪的目录设置,但是如果你重定向到godaddy服务器上的subDirectory,你必须创建一个带有RewriteEngine On的空.htaccess文件,否则它将无法工作。

edit2部分中的上述代码运行良好,但不适用于godaddy服务器...以下是文件访问版本:

Options -Multiviews
Options +FollowSymLinks

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_URI} ^/([^/]+)/(.*)$
RewriteCond %{DOCUMENT_ROOT}/%1/WebShop/View/public/%2 -f
RewriteRule ^(.*)$ WebShop/View/public/%2 [L]

RewriteRule ^(.*)$ entryPoint.php [QSA,L]

我在“WebShop / View / public”目录中放置了一个带有RewriteEngine On的空的.htaccess文件,修复了L标志问题。