【问题标题】:Magento & .htaccessMagento & .htaccess
【发布时间】:2013-10-05 01:37:44
【问题描述】:

今天下午的大部分时间我都在试图弄清楚为什么我的 .htaccess 文件没有按预期工作。基本上我想做的是添加 url 重写以将旧 url 映射到新 url。所以我创建了所有的重写并将它们粘贴到 .htaccess 文件中,它们的工作方式是模式匹配并且服务器重定向,但它总是被重定向到domain.com/var/www/docroot/.../tools.html中的目录路径我认为这可能是由于RewriteBase 被注释掉并且根文档在其他地方没有正确设置,我无权访问主要配置文件,因为这是一个共享服务器。所以我取消了RewriteBase / 的注释,并且重定向按预期工作。问题是当我尝试导航到站点地图时出现 404 错误,站点地图肯定存在。从那以后我尝试了各种各样的事情,我想我已经把问题缩小到了

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l

在在线阅读各种内容并尝试理解 apache 文档时,我遇到了一些说重写条件仅适用于紧随其后的规则的内容。所以我尝试在 index.php 引导部分之前再次添加上述重写条件,这样做可以让我得到我的站点地图,但是当我尝试加载主页时,如果我注释掉 @,我会得到一个默认的 Plesk 控制面板页面987654325@ 我的主页加载,但站点地图 url 尝试加载 domain.com/var/www/.../sitemap.xml。我很困惑,现在我的头很痛,我整个下午都在努力寻找答案......如果有任何建议,我将不胜感激。

这是文件:

    ############################################
    ## uncomment these lines for CGI mode
    ## make sure to specify the correct cgi php binary file name
    ## it might be /cgi-bin/php-cgi

    #    Action php5-cgi /cgi-bin/php5-cgi
    #    AddHandler php5-cgi .php

    ############################################
    ## GoDaddy specific options

    #   Options -MultiViews

    ## you might also need to add this line to php.ini
    ##     cgi.fix_pathinfo = 1
    ## if it still doesn't work, rename php.ini to php5.ini

    ############################################
    ## this line is specific for 1and1 hosting

        #AddType x-mapp-php5 .php
        #AddHandler x-mapp-php5 .php

    ############################################
    ## default index file

        DirectoryIndex index.html index.php

    <IfModule mod_php5.c>

    ############################################
    ## adjust memory limit

    #    php_value memory_limit 64M
        php_value memory_limit 256M
        php_value max_execution_time 18000

    ############################################
    ## disable magic quotes for php request vars

        php_flag magic_quotes_gpc off

    ############################################
    ## disable automatic session start
    ## before autoload was initialized

        php_flag session.auto_start off

    ############################################
    ## enable resulting html compression

        #php_flag zlib.output_compression on

    ###########################################
    # disable user agent verification to not break multiple image upload

        php_flag suhosin.session.cryptua off

    ###########################################
    # turn off compatibility with PHP4 when dealing with objects

        php_flag zend.ze1_compatibility_mode Off

    </IfModule>

    <IfModule mod_security.c>
    ###########################################
    # disable POST processing to not break multiple image upload

        SecFilterEngine Off
        SecFilterScanPOST Off
    </IfModule>

    <IfModule mod_deflate.c>

    ############################################
    ## enable apache served files compression
    ## http://developer.yahoo.com/performance/rules.html#gzip

        # Insert filter on all content
        ###SetOutputFilter DEFLATE
        # Insert filter on selected content types only
        #AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript

        # Netscape 4.x has some problems...
        #BrowserMatch ^Mozilla/4 gzip-only-text/html

        # Netscape 4.06-4.08 have some more problems
        #BrowserMatch ^Mozilla/4\.0[678] no-gzip

        # MSIE masquerades as Netscape, but it is fine
        #BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

        # Don't compress images
        #SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary

        # Make sure proxies don't deliver the wrong content
        #Header append Vary User-Agent env=!dont-vary

    </IfModule>

    <IfModule mod_ssl.c>

    ############################################
    ## make HTTPS env vars available for CGI mode

        SSLOptions StdEnvVars

    </IfModule>

    <IfModule mod_rewrite.c>

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

        Options +FollowSymLinks
        RewriteEngine on

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

        RewriteBase /

    ############################################
    ## workaround for HTTP authorization
    ## in CGI environment

        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    ############################################
    ## always send 404 on missing files in these folders

        RewriteCond %{REQUEST_URI} !^/(media|skin|js)/


    ############################################
    ## never rewrite for existing files, directories and links

        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-l


    ############################################
    ## old url rewrites

        RewriteRule .*_57581_pd\.asp tools.html [R=302,L]


    ############################################
    ## rewrite everything else to index.php
    ## 

        RewriteRule .* index.php [L]

    </IfModule>


    ############################################
    ## Prevent character encoding issues from server overrides
    ## If you still have problems, use the second line instead

        AddDefaultCharset Off
        #AddDefaultCharset UTF-8

    <IfModule mod_expires.c>

    ############################################
    ## Add default Expires header
    ## http://developer.yahoo.com/performance/rules.html#expires

        ExpiresDefault "access plus 1 year"

    </IfModule>

    ############################################
    ## By default allow all access

        Order allow,deny
        Allow from all

    ###########################################
    ## Deny access to release notes to prevent disclosure of the installed Magento version

        <Files RELEASE_NOTES.txt>
            order allow,deny
            deny from all
        </Files>

    ############################################
    ## If running in cluster environment, uncomment this
    ## http://developer.yahoo.com/performance/rules.html#etags

        #FileETag none

在完整的文件中,有很多这种类型的重写RewriteRule .*_57581_pd\.asp tools.html [R=302,L],但是这里粘贴的太多了,所以我删除了除了 1 之外的所有内容以供参考。

【问题讨论】:

  • 你为什么不使用 Magento 内置的 URL 重写功能而不是在 URLS 中硬编码到你的 .htaccess 文件中呢?是因为您需要通配符 url 重定向吗?
  • @Axel 不,我可以建立一个完整的 url 列表并重新映射它们,但我认为在服务器级别进行重定向会更快/更有效。而且它更快/更容易,将来更新索引时我可以轻松地摆脱它们。其中有 24,000 个。

标签: apache .htaccess magento mod-rewrite


【解决方案1】:

您是否尝试过将此规则更改为:

RewriteRule .*_57581_pd\.asp http://%{HTTP_HOST}/tools.html [R=302,L]

【讨论】:

  • 我将发表一篇长评论,说明我之前是如何考虑类似的事情以及为什么我没有这样做的。但是我的头已经够疼了,所以我会尝试并报告。
  • No 没有用,它确实将上述规则重定向到正确的页面,但 RewriteBase / 未注释它们仍然有效。这是我的站点地图无法加载,我刚刚尝试再次将 RewriteBase / 注释掉并使用您上面的代码进行重写,但我的站点地图仍然是 404。
  • @4D1 这真的很奇怪,由于某种原因,它一直认为它们都是文件路径 URI,而不是 URL 路径,我想你可以尝试的另一件事是将基础留在,然后在每个/tools.html/index.php 前面添加一个/ 以试图让apache 相信您正在处理URL 路径。
  • 是的,它让我爬墙了,但我不确定我是否正确地解释了自己,所以试着简洁地重申一下...RewriteBase / 评论重定向被视为文件路径 URI 和我的 sitemap.xml 404。 RewriteBase / 未注释我的重定向被视为 URL 路径,但我的 sitemap.xml 仍然是 404。如果我将RewriteCond %{REQUEST_FILENAME} !-f 指令移动/复制到RewriteRule .* index.php [L] 上方,然后我的站点地图加载,我的重定向工作但mydomain.com 加载一个plesk 页面,除非我导航到mydomain.com/index.php
  • @4D1 用RewriteCond %{REQUEST_URI} !sitemap\.html 代替RewriteCond %{REQUEST_FILENAME} !-f 怎么样?
猜你喜欢
  • 2012-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多