0

我有一个在 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 部分。它在子文件夹中找不到现有文件。我尝试使用绝对路径、相对路径、rewritebase 一切,但它们都不起作用。Godaddy 不授予对重写日志的访问权限……知道如何解决这个问题吗?

编辑:

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

Options -Multiviews
Options +FollowSymLinks

RewriteEngine On

RewriteBase /

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

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

编辑2:

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

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 rewrite 永远无法识别 L 标志?

(去喝啤酒)

4

1 回答 1

0

这可能是因为某种奇怪的目录设置,但如果你重定向到 Godaddy 服务器上的子目录,你必须在 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 标志问题。

于 2012-04-14T19:46:26.723 回答