工作的.htaccess配置在httpd.conf上不工作

hof1towb  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(176)

一个早期的警告-我是一个初学后端编程的学生,现在,即使是.htaccess URL重写是一个巨大的痛苦实现。
我在Mac上安装了XAMPP Apache(不是XAMPP-VM),在“/htdocs”中有一个名为“Project”的网站文件夹。
有一个.htaccess文件在我的“root”(“root”是“/Project”文件夹)文件夹中,另一个在“PHP”文件夹中(即root/PHP/.htaccess)。

Options -Indexes

ErrorDocument 403 /Project/index.php

<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_URI} !(.*)Pages 
        RewriteRule ^(.*)$ Pages/$1.php [L,NC]
</IfModule>

而root/PHP的.htaccess则具有以下特性:

Deny from all

一切正常,在阅读了更多关于.htaccess的最佳实践之后,我想将上述所有配置移到httpd.conf,特别是位于“/Applications/XAMPP/xamppfiles/apache 2/conf”中的配置。我将代码移到了httpd(正确吗?),注解掉了前面提到的.htaccess文件中的所有内容,下面是httpd现在的样子:

Alias /bitnami/ "/Applications/XAMPP/xamppfiles/apache2/htdocs/"
Alias /bitnami "/Applications/XAMPP/xamppfiles/apache2/htdocs"

<Directory "/Applications/XAMPP/xamppfiles/apache2/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

<Directory "/Applications/XAMPP/xamppfiles/apache2/htdocs/Project">
    Options -Indexes

    ErrorDocument 403 /Project/index.php
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_URI} !(.*)Pages 
        RewriteRule ^/(.*)$ /Pages/$1.php [L,NC]
    </IfModule>
</Directory>
    
<Directory "/Applications/XAMPP/xamppfiles/apache2/htdocs/Project/PHP">
    Deny from all
</Directory>

我试着在谷歌上搜索一个解决方案,到目前为止什么都没有。为了以防万一,我还要提到这个“CMS”项目的目标是“写一次,安装在任何地方”。

[编辑]@MrWhite做了一些澄清,这是xamppfiles中的配置。另外,Options -Indexes/Project/PHP > Require all denied也不工作,因为我可以从浏览器浏览文件夹并访问“PHP”文件夹。在此之前也不工作***编辑***。

-xamppfiles/apache 2/配置文件/httpd.配置文件

Alias /bitnami/ "/Applications/XAMPP/xamppfiles/apache2/htdocs/"
Alias /bitnami "/Applications/XAMPP/xamppfiles/apache2/htdocs"

<Directory "/Applications/XAMPP/xamppfiles/apache2/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

Include "/Applications/XAMPP/xamppfiles/apache2/conf/httpd.conf"

-xamppfiles/apache 2/配置文件/项目配置文件

<VirtualHost *:80>
    DocumentRoot "/Applications/XAMPP/xamppfiles/apache2/htdocs/Project">
    
    Options -Indexes
        
    ErrorDocument 403 /Project/index.php
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_URI} !(.*)Pages 
        RewriteRule ^(.*)$ Pages/$1.php [L,NC]
    </IfModule>
    
    <Directory "/Applications/XAMPP/xamppfiles/apache2/htdocs/Project/PHP">
        Require all denied
    </Directory>
</VirtualHost>

我会非常感激任何帮助。

gab6jxml

gab6jxml1#

  • 原件:*
RewriteRule ^(.*)$ Pages/$1.php [L,NC]
  • 新用户:*
RewriteRule ^/(.*)$ /Pages/$1.php [L,NC]

您不应该在这里做任何更改。您正在将指令从.htaccess移到<Directory>节(在服务器配置中)。它们都是 directory 上下文,并且工作方式相同。(您错误地认为这是 servervirtualhost 上下文,尽管目标URL路径仍然是错误的。)
通过在RewriteRulepattern(第一个参数)中的URL路径的开头引入斜线,规则将永远不会匹配。如果它匹配了......您在 substitution 字符串(第二个参数)开头引入的额外斜线将错误地将请求重写为文档根中的/Pages,而不是看起来意图的/Project/Pages
请注意,如果您要将.htaccess配置移动到服务器配置中的<Directory>容器,则您 * 可能 * 应该完全禁用.htaccess覆盖,因为包含mod_rewrite指令的.htaccess文件将完全覆盖服务器配置中的<Directory>容器。例如:

AllowOverride None

另请注意,OrderAllowDeny是Apache 2.2指令,以前在Apache 2.4上已弃用。在2.4上,应改用等效的Require指令。例如:

Require all granted

Require all denied
  • 额外 *

考虑为每个项目创建额外的<VirtualHost>容器,将它们存储在单独的文件中,并将它们存储在主服务器配置中,而不是直接修改主服务器配置。这将允许您在同一个Web服务器上托管多个(单独的)网站。

woobm2wo

woobm2wo2#

我已经发现了问题,这是我的盲目错误。

<Directory "/Applications/XAMPP/xamppfiles/apache2/htdocs/Project">
    Options -Indexes
    //...

我指向了错误的htdocs文件夹,其中包含我的项目,正确的方式是:

<Directory "/Applications/XAMPP/xamppfiles/htdocs/Project">

希望这能为其他会遇到这个的人节省一些时间。

相关问题