我在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标志?
(去喝啤酒)
答案 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标志问题。