【问题标题】:yii2 cannot access root subfolder using htaccessyii2 无法使用 htaccess 访问根子文件夹
【发布时间】:2019-07-04 09:42:45
【问题描述】:

我真的不擅长 htaccess 设置,希望得到一些帮助。我在子文件夹中有一个项目,可以像这样打开:www.mydomain.com/subfolder/。我把我的项目放在“子文件夹”中。 “子文件夹”不是子域,我只是在根文件夹中创建了一个新文件夹。

我可以打开主页,但所有其他页面,如 www.mydomain.com/subfolder/about、www.mydomain.com/subfolder/product 都有 500 内部服务器错误页面。我也无法访问上传文件夹中的上传文件,所以像 www.domain.com/subfolder/uploads/filename.jpg 这样的 URL 将返回错误 404。我很确定没有 php 错误,因为我也上传了它我的另一个子域(不同的域),它工作正常。

这是我的 htaccess 设置:

Options +FollowSymlinks
RewriteEngine On

RewriteCond %{REQUEST_URI} /(backend)
RewriteRule ^backend/assets/(.*)$ backend/web/assets/$1 [L]
RewriteRule ^backend/css/(.*)$ backend/web/css/$1 [L]
RewriteRule ^backend/font/(.*)$ backend/web/font/$1 [L]
RewriteRule ^backend/plugins/(.*)$ backend/web/plugins/$1 [L]
RewriteRule ^backend/images/(.*)$ backend/web/images/$1 [L]
RewriteRule ^backend/js/(.*)$ backend/web/js/$1 [L]

RewriteCond %{REQUEST_URI} !/backend/web/(assets|css|font|plugins|images|js)/
RewriteCond %{REQUEST_URI} /(backend)
RewriteRule ^.*$ backend/web/index.php [L]

RewriteCond %{REQUEST_URI} /(assets|css|js|img|fonts|uploads)
RewriteRule ^assets/(.*)$ frontend/web/assets/$1 [L]
RewriteRule ^css/(.*)$ frontend/web/css/$1 [L]
RewriteRule ^js/(.*)$ frontend/web/js/$1 [L]
RewriteRule ^img/(.*)$ frontend/web/img/$1 [L]
RewriteRule ^fonts/(.*)$ frontend/web/fonts/$1 [L]
RewriteRule ^uploads/(.*)$ uploads/$1 [L]

RewriteCond %{REQUEST_URI} !/(frontend|backend)/web/(assets|css|js|img|images|fonts|uploads|plugins|font)/
RewriteCond %{REQUEST_URI} !index.php
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ frontend/web/index.php

有人可以帮我吗?

【问题讨论】:

  • 请显示您的配置属性。看起来你 baseUrl 的定义是错误的。
  • 您可能还需要重新配置您的 urlManager 来处理此类链接 - 看起来像是 yii2 的路由问题,而不是 apache。

标签: php .htaccess yii2


【解决方案1】:

检查脚本后,我发现代码中有些不同。 我尝试修复一些这样的代码。

Options +FollowSymlinks
RewriteEngine On

RewriteCond %{REQUEST_URI} ^/(backend)
RewriteRule ^backend/assets/(.*)$ backend/web/assets/$1 [L]
RewriteRule ^backend/css/(.*)$ backend/web/css/$1 [L]
RewriteRule ^backend/font/(.*)$ backend/web/font/$1 [L]
RewriteRule ^backend/img/(.*)$ backend/web/img/$1 [L]
RewriteRule ^backend/js/(.*)$ backend/web/js/$1 [L]
RewriteRule ^backend/plugins/(.*)$ backend/web/plugins/$1 [L]

RewriteCond %{REQUEST_URI} !/backend/web/(assets|css|font|img|js|plugins)/
RewriteCond %{REQUEST_URI} ^/(backend)
RewriteRule ^.*$ backend/web/index.php [L]

RewriteCond %{REQUEST_URI} ^/(assets|css|font|img|js|uploads)
RewriteRule ^assets/(.*)$ frontend/web/assets/$1 [L]
RewriteRule ^css/(.*)$ frontend/web/css/$1 [L]
RewriteRule ^font/(.*)$ frontend/web/font/$1 [L]
RewriteRule ^img/(.*)$ frontend/web/img/$1 [L]
RewriteRule ^js/(.*)$ frontend/web/js/$1 [L]
RewriteRule ^uploads/(.*)$ frontend/web/uploads/$1 [L]

RewriteCond %{REQUEST_URI} !/(frontend|backend)/web/(assets|css|font|img|js|uploads|plugins)/
RewriteCond %{REQUEST_URI} !index.php
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ frontend/web/index.php [L]

我添加了一些标志,即这个标志 (^)。 对于上传文件(图像、js、css 等),我建议您上传到文件夹 backend/web/somefolder 或 frontend/web/somefolder。放在这两个地方旁边,对于图像,使您的图像无法显示在所有地方(根据我的经验)。 另外,您可以尝试将 frontend/web/backend/web/ 内的文件夹命名为同名,这样更容易记忆(请参阅我修复的代码以了解我的意思)。我希望它对其他人有所帮助。

如果有人有更好的解决方案,请在这里分享。谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多