htaccess 和 rewrite - Alias 内的内部重定向

htaccess 和 rewrite - Alias 内的内部重定向

.htaccess我在子目录中有以下内容:

RewriteEngine on
RewriteRule ^file.js$ file.php

包含上述文件和其他文件的目录如下所示:

dir/
├── index.html
└── js
    ├── file.php
    └── .htaccess

我希望我file.js内部重定向file.php

当我有dir/var/www/html/,我的vhost定义如下所示:

DocumentRoot /var/www/html
<Directory "/var/www/html">
    AllowOverride All
    Require all granted
</Directory>
#Alias /dir "/tmp/dir"
#<Directory "/tmp">
#       AllowOverride All
#       Require all granted
#</Directory>

有用

但是,当我移动dir并将/tmp/它更改vhost为如下所示时:

DocumentRoot /var/www/html
#<Directory "/var/www/html">
#    AllowOverride All
#     Require all granted
#</Directory>
Alias /dir "/tmp/dir"
<Directory "/tmp">
       AllowOverride All
       Require all granted
</Directory>

重定向不再起作用,但我仍然可以访问其他文件,如index.html

日志显示重写将添加到DocumentRoot我的完整路径中file.php,从而给了我一个文件不存在信息

问题:

我如何编写一个 .htaccess 文件不可知论者到它被放置的位置,只是从一个特定文件到另一个文件进行内部重定向?

请记住,虽然我可以更改主vhost配置来解决这个问题,我的目标是只使用.htaccess

答案1

最佳实践是将您的配置指令移动到实际的 Apache 配置文件(并完全禁止 .htaccess 文件)。

在这种情况下,这将解决您的问题,因为您不再依赖文件系统位置来使您的指令生效......

<VirtualHost *:80>
  ServerName    www.example.com
  ServerAlias   example.com
  DocumentRoot  /var/www/example.com/
  Alias /scripts/ /var/www/scripts/
  RewriteEngine on
  RewriteRule   ^file.js$ file.php
</VirtualHost>

如果你不是系统管理员,并且无权访问你的 Apache 配置,那么你的问题就不会是关于主题.htaccess但这不是重点,您可以通过在包含的目录中创建一个(复制)文件来解决问题file.js。取决于AllowOverride 指示为您配置了真正的管理员,您通常可以将 .htaccess 文件放置在 Apache 有权访问的任何目录和子目录中。您不受 DocumentRoot 的限制。

相关内容