gpt4 book ai didi

.htaccess - Yii2 应用程序位于 Wordpress 网站的子目录中 : cannot enable pretty urls

转载 作者:行者123 更新时间:2023-12-04 08:35:23 25 4
gpt4 key购买 nike

我正在尝试在 Wordpress 位于根目录的共享环境中部署一个基本的 web 应用程序。 Yii2 应用程序位于/subfolder。
我关注 this guide .在 root 的 .htaccess 中,我添加了:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /subfolder
RewriteCond %{REQUEST_URI} ^/subfolder
RewriteCond %{REQUEST_URI} !^/subfolder/web
RewriteRule ^assets/(.*)$ /web/assets/$1 [L]
RewriteRule ^css/(.*)$ /web/css/$1 [L]
RewriteRule ^js/(.*)$ /web/js/$1 [L]
RewriteRule ^images/(.*)$ /web/images/$1 [L]
RewriteRule (.*) /web/$1 [L]

RewriteBase /subfolder
RewriteCond %{REQUEST_URI} ^/subfolder
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /web/index.php
</IfModule>

# BEGIN WordPress
# The directives (lines) between "BEGIN WordPress" and "END WordPress" are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
但是添加了这些规则后,所有 Wordpress 的页面都是通过 Yii 处理(或尝试)的,因此这会破坏博客安装。这是捕获所有页面的第一个规则 block ,但我不明白为什么作为两个 RewriteCond应该只拦截 Yii 应用 URI。我检查了 mod_rewrite 文档,但不明白出了什么问题。任何帮助表示赞赏。谢谢

最佳答案

RewriteBase /subfolder

不能设置多个 RewriteBase同一 .htaccess 中的指令文件。最后一个实例“获胜”并控制整个文件。所以,在 .htaccess您发布的文件, RewriteBase /在 WordPress 代码块中设置的是文件的实际设置。
然而,没有一个指令实际上使用了 RewriteBase。无论如何都是指令-所以没有 RewriteBase指令实际上在做任何事情。 RewriteBase指令仅适用于您在 RewriteRule 中设置了相对路径(不以斜杠开头)的情况。替换字符串。

but I don’t understand why as the two RewriteCond should intercept only the Yii app URIs.


RewriteCond %{REQUEST_URI} ^/subfolder
RewriteCond %{REQUEST_URI} !^/subfolder/web
RewriteRule ^assets/(.*)$ /web/assets/$1 [L]

想必就是这两个 RewriteCond您所指的指令......在这种情况下,这两个条件并没有真正做任何事情。 RewriteCond指令仅适用于第一个 RewriteRule后面的指令,因此它仅适用于重写您的 assets 的指令.
然而,这个 RewriteRule正在匹配 /assets在文档根目录中,而不是 /subfolder/assets ,这大概是要求 - 所以这些规则将无法匹配。

But with these rules added all Wordpress’ pages are handled (or attempted) through Yii, so this breaks the blog installation.


这些规则肯定会“破坏博客安装”,但是,它们似乎并没有达到“通过 Yii”处理请求的程度。没有任何东西实际上将请求重写为 /subfolder .但是,以下指令无条件地将所有内容重写为 /web文档根目录中的目录(可能不存在) - 所以这肯定会“破坏”所有 WordPress URL。
RewriteRule (.*) /web/$1 [L]

事实上,我本以为这会创建一个重写循环(500 内部服务器错误响应)?!除非你有子目录 /web关闭文档根目录,其中还包含 .htaccess包含 mod_rewrite 指令的文件?但这似乎不太可能,因为 /web目录应该在 /subfolder 内目录?
请尝试以下操作:
RewriteEngine On

RewriteRule ^(subfolder)/(assets|css|js|images)/(.*) $1/web/$2/$3 [L]
RewriteRule ^(subfolder)/((?!web).*) $1/web/$2 [L]

RewriteRule ^subfolder/web/index\.php - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(subfolder)/. $1/web/index.php [L]

# BEGIN WordPress
:
不需要 <IfModule>包装。或 RewriteBase指示。
或者
但是,最好将这些指令移动到它们自己的 .htaccess 中。项目根目录中的文件,即。 /subfolder/.htaccess - 我相信这是链接的“指南”所暗示的。这使两个项目完全分开。并且避免了显式包含 /subfolder在指令中。
另外,创建另一个 .htaccess web 中的文件子目录,即 /subfolder/web/.htaccess .这又是在链接的“指南”中建议的。但是,这也消除了在父 .htaccess 中路由请求的附加指令的需要。文件。
例如,将这些更改放在一起, /.htaccess文档根目录中的文件应该只有 WordPress 指令。进而... /subfolder/.htaccess
RewriteEngine On

RewriteRule ^((?:assets|css|js|images)/.*) web/$1 [L]
RewriteRule ^((?!web).*) web/$1 [L]
/subfolder/web/.htaccess
RewriteEngine On

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
同样,不需要 RewriteBase此处的指令 - 事实上,使用 RewriteBase这里可以说使事情复杂化。当在 /subfolder/web/.htaccess文件,所有相对 URL 路径都相对于该目录。
所以,请求 /subfolder/foo/subfolder/.htaccess 内部重写文件到 /subfolder/web/foo .然后被 /subfolder/web/.htaccess 捕获文件(防止重写循环)并在内部重写为 /subfolder/web/index.php (假设 foo 不作为物理文件存在)。

关于.htaccess - Yii2 应用程序位于 Wordpress 网站的子目录中 : cannot enable pretty urls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64823577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com