如何从 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) 导航到 Unsecure 和 Secure 选项卡。确保 Unsecured 和 Secure - 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) 确保 Unsecure 和 Secure 字段包含与之前的默认配置文件相同的域。
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
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
比重启 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?