一个早期的警告-我是一个初学后端编程的学生,现在,即使是.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>
我会非常感激任何帮助。
2条答案
按热度按时间gab6jxml1#
您不应该在这里做任何更改。您正在将指令从
.htaccess
移到<Directory>
节(在服务器配置中)。它们都是 directory 上下文,并且工作方式相同。(您错误地认为这是 server 或 virtualhost 上下文,尽管目标URL路径仍然是错误的。)通过在
RewriteRule
pattern(第一个参数)中的URL路径的开头引入斜线,规则将永远不会匹配。如果它匹配了......您在 substitution 字符串(第二个参数)开头引入的额外斜线将错误地将请求重写为文档根中的/Pages
,而不是看起来意图的/Project/Pages
。请注意,如果您要将
.htaccess
配置移动到服务器配置中的<Directory>
容器,则您 * 可能 * 应该完全禁用.htaccess
覆盖,因为包含mod_rewrite指令的.htaccess
文件将完全覆盖服务器配置中的<Directory>
容器。例如:另请注意,
Order
、Allow
和Deny
是Apache 2.2指令,以前在Apache 2.4上已弃用。在2.4上,应改用等效的Require
指令。例如:考虑为每个项目创建额外的
<VirtualHost>
容器,将它们存储在单独的文件中,并将它们存储在主服务器配置中,而不是直接修改主服务器配置。这将允许您在同一个Web服务器上托管多个(单独的)网站。woobm2wo2#
我已经发现了问题,这是我的盲目错误。
我指向了错误的
htdocs
文件夹,其中包含我的项目,正确的方式是:希望这能为其他会遇到这个的人节省一些时间。