我遵循了https://github.com/crjoseabraham/php-mvc的基本项目结构 使用它,我创建了一个 php MVC 项目,该项目在开发服务器 AWS EC2 上运行良好。我在绑定域名后遇到重定向问题。
我已在 Apache2.conf 中对绑定域应用了以下更改。
<VirtualHost *:80>
ServerName subdomain.mydomain.com
ServerAlias www.subdomain.mydomain.com
DocumentRoot /var/www/html/project-1/public
<Directory /var/www/html/project-1/public>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/subdomain.mydomain.com_error.log
CustomLog ${APACHE_LOG_DIR}/subdomain.mydomain.com_access.log combined
</VirtualHost>
我的项目结构:
根目录.htaccess文件有以下代码:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
</IfModule>
公共目录.htaccess代码是:
<IfModule mod_rewrite.c>
Options -Multiviews
RewriteEngine On
RewriteBase /project-1/public
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
</IfModule>
因此,应用上述更改后,我可以使用域名访问我的项目,并成功打开登陆页面。但是当我单击菜单时,我收到错误:
内部服务器错误
服务器遇到内部错误或配置错误, 无法完成您的请求。
请联系服务器管理员[未给出地址] 告知他们此错误发生的时间以及您采取的操作 在此错误之前执行。
有关此错误的更多信息可能会在服务器错误中提供 记录。
为了解决此问题,我在公共 .htaccess 文件中应用了许多更改,但无法解决它。那么,您能帮我解决这个问题吗?
以下是我尝试过的更改:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ public/index.php?url=$1 [QSA,L]
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase //
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
Apache 错误日志:
AH00124:由于可能的配置错误,请求超出了 10 个内部重定向的限制。如有必要,请使用“LimitInternalRecursion”增加限制。使用“LogLevel debug”获取回溯。,参考:http://subdomain.mydomain.com/
DocumentRoot /var/www/html/project-1/public
由于您已将
DocumentRoot
设置为直接指向 public
子目录,那么您应该完全删除第一个 .htaccess
文件(您称为“根目录 .htaccess 文件”的文件 - 但它不是“根目录”) “,它位于根目录上方目录中!)
然后您只需要在
.htaccess
目录(即“根”)内有一个 public
文件,并完全删除 RewriteBase
指令(您设置不正确,会导致重写循环 - 500 错误)。 例如:
# The public (root) directory .htaccess file
Options -MultiViews
DirectoryIndex index.php
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
<IfModule>
包装纸也应该去除。相对替换字符串重写相对于包含
.htaccess
文件的目录的请求。这里不需要
RewriteBase
。