没有 index.php,除主页外的 Magento URL 不起作用

Posted

技术标签:

【中文标题】没有 index.php,除主页外的 Magento URL 不起作用【英文标题】:Magento URLs other than home page do not work without index.php 【发布时间】:2012-07-27 00:16:59 【问题描述】:

我的 magento 安装在 Ubuntu Linux 的 /var/www/magento 下。 这个问题看起来像档案中的一些问题 但实际上有些不同。当我安装 Magento 时 Ubuntu Linux 我启用了 Apache mod_rewrite URL 重写。

当我访问 http://localhost/magento 我的服务器将 URL 重写为 http://localhost/magento/ 并显示页面。然后我点击其中一个链接 在导航栏中,假设它是导航栏项目“foo”。 然后magento带我去:

http://localhost/magento/foo.html

显示“未找到”的 apache 页面。

我要把网址改成----->

http://localhost/magento/index.php/foo.html

为了显示页面。

就好像我的 mod_rewrite 工作出了点问题。

谢谢,

约翰·戈奇

配置:系统->配置->(常规->)Web:

使用 Web 服务器重写:是

基本网址:http://localhost/magento

如果我将“用户 Web 服务器重写:”设置为 NO,则链接 从我的主页可以正常工作,但请参阅页面 http://localhost/magento/index.php/foo.html 显示正确的页面,但是 该网站的作品我不喜欢这个网址。一世 希望它是 http://localhost/magento/foo.html 没有 index.php 位,因为这也可能 对 SEO 更友好。

谢谢,

约翰·戈奇


更新:我尝试取消注释我的人工 127.0.1.1 IP 地址 哪个 ubuntu 已放入 /etc/hosts 并将其放置在我的真实 IP 中,但是 没有运气。我仍然有完全相同的问题。还有里面的网址 我的浏览器被重写为 http://localhost / 等...每当我 在其中输入 192.168.3.31、avalanche 或 avalanche.com。 我仍在尝试找出解决问题的方法 如上所述,因为这没有做到。

127.0.0.1       localhost
#127.0.1.1      avalanche

192.168.4.35    avalanche avalanche.com

当我重新启动 Apache 时,我得到:

# service apache2 restart
 * Restarting web server apache2                                                apache2: Could not reliably determine the server's fully qualified domain name, using 192.168.4.35 for ServerName
 ... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 192.168.4.35 for ServerName

不确定如何解决原来的问题。我正在本地服务器上进行测试。


我什至尝试过这个解决方案,然后重新启动了 apache2,但没有运气!

How to remove index.php from URLs?

所以放置:

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

不起作用,即使使用 RewriteBase /,它也不起作用。


好的,我终于设法解决了问题。 文件 /etc/apache2/sites-enabled/000-default 为所有目录设置了以下指令 在此文件中定义:

 AllowOverride None

例如,对于 /var/www,它是默认的文档根目录 在 Ubuntu 12.04 LTS Linux 系统上设置此文件包含

    <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>

据我了解,这意味着 .htaccess 文件位于 此目录及其所有子目录将不会被解析。 要解决此问题,只需设置:

AllowOverride All

意味着您将能够覆盖服务器配置指令 在 /etc/apache2/apache2.conf (或 /etc/apache2/httpd.conf 中找到 包括在内)。

AllowOverride 默认设置为 None 的原因之一可能是 它会减慢服务器速度,另一个是出于安全原因。这 指令应设置在标签内,并且 后者可以覆盖前者。这不是另一个原因 默认设置是必须递归解析 .htaccess 每次目录路径中的文件 加载可以减慢系统,从而放置 /etc/apache2/httpd.conf 中的 .htaccess 内容 可能是值得推荐的,因为它可能导致 提高速度。

所以放

    <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            #AllowOverride None
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

在 /etc/apache2/sites-enabled/000-default 中

然后运行:service apache2 restart

是解决方案。

【问题讨论】:

我已经尝试了所有我能找到的解决方案,它们完全没有区别,即使我在管理面板中启用 mod_rewrite,清除缓存,重新启动 apache,并将代码放在 /var /www/mymagento/.htaccess (并转到 http://myip/mymagento/admin 这给出了文件未找到而 http://myip/mymagento/index.php/admin 工作)。 如果您已设法解决问题,请不要将其添加到您的问题中。而是将其作为单独的答案。允许并鼓励您这样做。 【参考方案1】:

您的 Magento 根目录中有 the appropriate .htaccess file 吗?此外,您可能会遇到localhost 的问题。建议使用 127.0.0.1 或在 hosts 文件中映射 dev 域。

【讨论】:

您好,是的,我有这个文件。它是在我解压缩 magento 源时安装的。但是我仍然遇到问题。我需要调整这个文件吗?如果需要,那该怎么做?也许我需要更改 RewriteRule .* index.php [L] 什么的? 我试过修改我的 /etc/hosts 文件,但还是有问题。【参考方案2】:

你试过了吗:

RewriteBase /magento/

而不是 RewriteBase /mymagento/ 因为你的网址是 http://localhost/magento/

你的 apache 虚拟主机是否允许覆盖配置,例如

<VirtualHost *:80>
...
<Directory /var/www/magento/>
    AllowOverride All
</Directory>
</VirtualHost>

【讨论】:

谢谢,这真的很有帮助,而且确实是寻求的解决方案。【参考方案3】:

在 Magento 配置中(通过系统 > 配置在 Magento 管理面板中访问)有一些相关设置决定了最终的搜索引擎友好 URL 的样子。

Web > Search Engine Optimization > Use Web Server Rewrites

应始终启用的设置。如果不是 "/index.php/" 将被添加到 URL 中,这是不必要的并且看起来很丑陋。 要启用此选项,您还需要在托管环境中启用 Apache mod_rewrite

Catalog > Search Engine Optimizations > Product URL Suffix

此处的默认值为“.html”,它将附加到每个产品 URL。一些 SEO 专家声称这是提高评级所必需的,而其他 SEO 出口商则认为并非如此。对于我们与 Joomla 的 MageBridge 集成!此设置必须为空。

Catalog > Search Engine Optimizations > Category URL Suffix

同上,但现在是分类。

Catalog > Search Engine Optimizations > Use categories path for product URLs

启用此选项后,产品 URL 还将包括类别 URL 键。虽然有人认为这会导致内容重复,但产品页面也可能会从中受益,因为它们成为更大结构的一部分。

Catalog > Search Engine Optimizations > Use Canonical Link Meta Tag For Products

如果您真的担心重复内容(这并不像某些人告诉您的那么糟糕),那么您可以启用规范标签,一旦检测到重复内容,它就会告诉搜索引擎哪个页面处于领先地位。

Catalog > Search Engine Optimizations > Use Canonical Link Meta Tag For Categories

与上述相同,但针对类别。

关于此事的进一步阅读http://www.yireo.com/tutorials/magento/magento-administration/664-fixing-url-rewrites-with-magento

【讨论】:

感谢您提供所有这些信息,但我仍然遇到同样的问题。 Web > Search Engine Optimization > Use Web Server Rewrites 在全局级别设置为 Yes,我有 #a2enmod rewrite 表示模块重写已启用。那么问题出在哪里?我想去掉 URL 中的 /index.php/! 听起来您需要让熟悉 Apache Web 服务器管理的人帮助您解决 mod_rewrite 无法在您的服务器上运行的原因。正确设置 mod_rewrite 后,只需打开 Use Web Server Rewrites 即可(在更改和保存设置后刷新缓存和重新索引 URL 重写索引)。在您的 Magento 根 .htaccess 和服务器配置中,您需要确保在正确的位置设置以下内容:RewriteEngine OnAllowOverride AllOptions +FollowSymLinks 并且 RewriteBase 设置为正确的目录。 像 Fiasco Labs 指出的那样,您现在必须验证 mod_rewrite 是否已正确配置并且可以通过 .htaccess 启用 非常感谢并 +1。第一个选项对我有用:)【参考方案4】:

将我的实时站点转移到本地主机时,我遇到了同样的问题。最后我解决了。

我有 Windows 操作系统。所以我为我的本地主机使用了 WAMP 堆栈。我花了很多时间通过更改 .htaccess 文件、修改 DB 中的 core_config_data 表来检索本地主机中的所有 URL 及其内容,但一切都出错了。

最后我找到了在 Apache 服务器中启用 rewrite_module 的线索。 1. 启用它 单击托盘栏中的 Wamp 图标(WAMP->Apache->Apache 模块-> 并选择 rewrite_module)。 2. 重启 Wamp 服务器。 3. 清除缓存(我认为是可选的) - 删除 var/cache 文件夹中的所有文件

确保你的根文件夹中有 .htaccess 文件让我们假设(localhost/magento/.htaccess)。如果没有,您将不会得到结果。

就是这样。

我希望现在您能够检索除主页以外的所有其他页面和 URL,并且您不会收到 404 错误页面。

【讨论】:

【参考方案5】:

这是一个 mod_rewrite 问题。我正在运行 Ubuntu,在为商店迁移设置 apache 和 magento 时遇到了同样的问题。

/etc/apache2/sites-available/000-default.conf 更改为包含

<VirtualHost ...>
...
<Directory /var/www>
    Options Indexes FollowSymLinks MultiViews   
    AllowOverride All
    Order allow,deny
    allow from all 
</Directory>

</VirtualHost>

因此允许重写网络服务器上的var/www

要让 apache 处理来自 magentos .htaccess 文件的重写规则,启用重写模块通过

sudo a2enmod rewrite

重启apache通过

sudo /etc/init.d/apache2 force-reload 
//(not service apache2 restart)

为我解决了整个问题。

请参阅http://wiki.ubuntuusers.de/Apache/mod_rewrite 和http://wiki.ubuntuusers.de/Apache,详细了解如何以正确的方式进行设置。

【讨论】:

【参考方案6】:

为 wamp 启用 Apache 重写模块对我有用。

【讨论】:

尝试了从.htaccessdatabase tweaks 的几乎所有解决方案。这个对我有用。!谢谢。 +1【参考方案7】:
Go to admin url of your site. 
Suppose,http://example.com/index.php/admin/

Go to 'System' menu from navigation and click on 'Configuration'.
Under the 'General' tab in the left, click on 'Web'.
Open the 'Search Engines Optimization' section by clicking on it.
Then set 'Use Web Server Rewrites' value to 'No'

【讨论】:

您是否可以在此答案中添加任何格式或其他上下文以使其更彻底?

以上是关于没有 index.php,除主页外的 Magento URL 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

React 静态网站将除主页外的每个页面重定向到 404

加载位于博客文件夹外的 index.php 内容以发布单页

nginx 将除白名单外的所有内容都重写为 index.php

Yii获取当前url和域名

我在使用 Index.php 加载主页时收到 404,但 index.php 可用于直接链接,为啥?

问题让 pygame 在 Macos 上显示除空白屏幕外的任何内容