我有一个在 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 标志?
(去喝啤酒)