如何从 URL 中删除 index.php?

Posted

技术标签:

【中文标题】如何从 URL 中删除 index.php?【英文标题】:How to remove index.php from URLs? 【发布时间】:2012-05-15 12:39:42 【问题描述】:

我安装 Magento 时的所有 URL 都需要在其中包含 index.php,例如:

http://example.com/index.php/admin/
http://example.com/index.php/customer/account/login/

问题是系统默认链接到类似的 URL

http://example.com/admin/
http://example.com/customer/account/login/

反正看起来更漂亮。我认为这是 .htaccess 中的重写问题,但由于过去修修补补给了我 500 多分,我想先问问你们。

更改 SEO 设置、刷新配置缓存和重新索引 URL 不起作用as suggested here。

【问题讨论】:

【参考方案1】:

在您的 .htaccess 中如何处理:

RewriteEngine On
RewriteBase /
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php/$1 [L]

【讨论】:

完全没有变化。 Magento 将其访问权限存储在 var/.htaccess — 这会是个问题吗? Magento 将其 一个 的 htaccess 文件存储在 var/.htaccess 中,其目录树中有几个以防止远程破坏或读取特权位置。您的服务器根目录中应该有一个。【参考方案2】:

请按照以下步骤操作,它会对您有所帮助。

第 1 步:转到您的站点根文件夹,您可以在那里找到 .htaccess 文件。用文本编辑器打开它,找到#RewriteBase /magento/ 行。只需将其替换为 #RewriteBase / 只需取出 'magento/'

第 2 步:然后转到您的管理面板并启用重写(设置 yes 以使用 Web 服务器重写)。您可以在 System->Configuration->Web->Search Engine Optimization 找到它。

第三步:然后进入缓存管理页面(系统缓存管理)刷新你的缓存,刷新查看站点。

【讨论】:

您在第 1 步中更改了评论 - 完全没有意义 @MaherAbuthraa 我认为斜杠 (/) 是 apache 的默认行为。因此,如果您没有为 magento 安装使用子目录,则无需添加此行。【参考方案3】:

您必须在 apache 中启用 mod_rewrite 才能使干净的 url 工作

如果 mod_rewrite 不在 phpinfo 中,你必须安装它

sudo a2enmod rewrite
sudo apache2ctl -l

您需要将出现的AllowOverride none 替换为AllowOverride all(在/etc/apache2/sites-enabled/000-default 中)

重启 Apache

sudo service apache2 restart

在 Magento 的管理员中转到 System > Configuration > Web > search engine Optimization 并将“Use Web Server Rewrites”更改为是

【讨论】:

对于未来的读者:我的问题源于默认的“AllowOverride”设置为None - 它应该设置为All(为了最少的麻烦体验)。 这解决了我的问题,使用默认的 .htaccess 配置【参考方案4】:

我尝试了帖子上的所有内容,但没有任何效果。 然后我更改了 ErJab 提供的 .htaccess sn-p 以读取:

RewriteRule ^(.*)$ 'folder_name'/index.php/$1 [L]

上面的行为我修复了它。其中 *folder_name* 是 magento 根文件夹。

希望这会有所帮助!

【讨论】:

【参考方案5】:

您好,我迟到了。只是想指出http://davidtsadler.com/archives/2012/06/03/how-to-install-magento-on-ubuntu/ 的指示非常有用。

我安装了带有 Apache、mysql 和 Php 的 Ubuntu 服务器,所以我想我可以跳转到标题创建将提供 Magento 服务的目录,我遇到了与 OP 相同的问题,即我在所有 URL 中都需要“index.php”(否则我会得到 404 未找到)。然后我回到安装和配置 Apache HTTP 服务器,重新启动 apache 后它运行良好。

供参考,我不见了:

sudo bash -c "cat >> /etc/apache2/conf.d/servername.conf <<EOF
ServerName localhost
EOF"

...和

sudo a2enmod rewrite
sudo service apache2 restart

希望对你有帮助

【讨论】:

【参考方案6】:

这可能是旧的,但我不妨把我学到的东西写下来。 所以无论如何我都是这样做的。

---------->

开始之前,请确保已启用 Apache 重写模块,然后按照以下步骤操作。

1) 登录到您的 Magento 管理区域,然后转到 系统 > 配置 > Web

2) 导航到 UnsecureSecure 选项卡。确保 UnsecuredSecure - Base Url 选项中包含您的域名,并且不要在末尾留下正斜杠网址。示例:http://www.yourdomain.co.uk/

3) 仍在 Web 页面上时,导航到 Search Engine Optimisation 选项卡,然后选择 Use Web Server 下面的YES重写选项。

4) 再次导航到 安全 标签(如果还没有的话)并在 在前端使用安全 URL 上选择 > 选项。

5) 现在转到您的 Magento 网站文件夹的根目录,并将此代码用于您的 .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]
</IfModule>

保存 .htaccess 并替换原始文件。 (请确保在使用之前备份您的原始 .htaccess 文件!!!)

6) 现在转到 System > Cache Management 并选择所有字段并确保 Actions 下拉菜单设置为 Refresh,然后提交. (这当然会刷新缓存。)

---------->

如果这不起作用,请按照这些额外的步骤操作。

7) 再次进入系统>配置>网络。这次查找当前配置范围并从下拉菜单中选择您的网站。 (这个当然是设置为Default Config)

8) 确保 UnsecureSecure 字段包含与之前的默认配置文件相同的域。

9) 导航到 Search Engines Optimisation 选项卡,然后选择 Use Web Server Rewrites 部分下方的Yes

10) 一旦 URL 相同,并且启用了重写,保存该页面,然后返回并确保它们都被选中为默认值,然后如果需要再次保存。

11) 重复步骤 6。

现在你的 index.php 问题应该已经解决了,一切都会好起来的!!!

我希望这会有所帮助,祝你好运。

【讨论】:

行的顺序重要吗? 我不确定行的顺序是否重要,我不会想象它在这种情况下会发生。为了安全起见,我会保留上述格式,因为这似乎适用于相当多的人。 确保 AllowOverride All 为您的配置打开,否则您的 .htaccess 文件将被忽略。 Re AllowOverride All 至少在最近的 Ubuntu 版本中,即添加到 /etc/apache2/apache2.conf &lt;Directory /var/www/&gt; Options Indexes FollowSymLinks AllowOverride All Require all granted &lt;/Directory&gt; 比重启 Apache:/etc/init.d/apache2 restart 如果可以的话,我会为这个答案投票 10 倍:D 谢谢@Blowtar!【参考方案7】:

如果其他解决方案不适合你,试试这个:

第 1 步:(如果您的安装是在 webroot 中)

替换

    #RewriteBase /magento/

    RewriteBase /

第 2 步:

添加以下行(包括排除管理员,因为后端需要 index.php 内部)

RewriteCond %THE_REQUEST ^.*/index.php
RewriteRule ^(.*)index.php$ http://www.yourdomain.com/$1 [R=301,L]
RewriteRule ^index.php/(admin|user)($|/) - [L]
RewriteRule ^index.php/(.*) $1 [R=301,QSA,L]

紧接着

RewriteRule .* index.php [L] 

这对我有用

如果仍然无法正常工作,请仔细检查 Magento 配置: 系统->配置->网页->搜索引擎优化。必须启用重写。

【讨论】:

【参考方案8】:

主要是如果您使用的是基于 Linux 的系统,例如“Ubuntu”,并且仅建议 localhost 用户而不是服务器。

按照前面答案中提到的所有步骤进行操作。 +

检查它的 Apache 配置。 (允许全部覆盖) 如果 AllowOverride 值为 none 则将其更改为 All 并再次重新启动 apache。

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

如果此步骤对任何人有帮助,请告诉我。因为如果你早点找到它可以节省你的时间。

我在 localhost 中添加我的 htaccess 文件中的确切行。 供大家参考

第 110 行左右

<IfModule mod_rewrite.c>

############################################
## enable rewrites

Options +FollowSymLinks
RewriteEngine on

############################################
## you can put here your magento root folder
## path relative to web root

#RewriteBase /

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]

图片适合一些从图片中容易理解的用户:

【讨论】:

添加图片以便初学者更好地理解

以上是关于如何从 URL 中删除 index.php?的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter 3.1.6 - 如何从 url 中删除 index.php

如何从 WordPress 网站 URL 中删除 index.php [重复]

如何从 Codeigniter 4 中的 url 中删除 public/index.php/

如何从 laravel 5 中的 url 中删除 public/index.php?

CodeIgniter:使用 HTTPS 和 AWS 时如何从 url 中删除 index.php

Codeigniter 表单打开如何删除 index.php