【问题标题】:Apache Alias For External Directory And All Sub Directories外部目录和所有子目录的 Apache 别名
【发布时间】:2015-09-06 13:57:32
【问题描述】:

我想为我的网站添加别名。这样 website.com/alias 将转到根文件夹之外的文件夹。此文件夹包含不同的网站,因此我希望能够将此别名视为子域。

AliasMatch  ^/subdir1/(.*)$ /var/www/otherfolder/subdir1/$1

我希望这将匹配所有调用,因此 website.com/subdir1/css/style.css 也是有效路径,但所有这些都返回 404 错误。

如何使别名与通配符匹配,以便条目将覆盖别名文件夹中的所有子目录。我希望能够在 apache 级别上执行此操作,而不必在 .htaccess 文件中执行此操作,因为那里的事情已经很复杂了,所以我想尽可能绕过它。

【问题讨论】:

  • 从技术上讲,任何子目录都不会被视为子域,无论它指向何处。它实际上是一个子目录。子域是 subdomain.example.com,其中 www.example.com 是域。

标签: apache .htaccess alias


【解决方案1】:

如果您加载了 mod_alias.so http 模块,则别名将起作用。您需要编辑 httpd.conf 配置文件并添加以下行并重新启动 httpd。

LoadModule alias_module modules/mod_alias.so

【讨论】:

  • 别名已经起作用了,只是没有在别名中提取子目录
  • 您是否检查了目录的权限?您是否在 /var/log/httpd/error_log 中观察到任何特定错误?
  • 错误日志只是说它找不到文件。由于某种原因,所有文件路径都被从子目录中剥离。如果我去 website.com/subdir/css 它会把我带到 website.com/css
【解决方案2】:

问题是由基本 URL 引起的。 “/”不能作为基本 URL 正确工作。相反,我能够根据这里的答案解决它。

Set RewriteBase to the current folder path dynamically

RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$
RewriteRule ^(.*)$ - [E=BASE:%1]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ %{ENV:BASE}/index.php [L]

根据我链接的帖子,以上足以解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    相关资源
    最近更新 更多