URL 重写导致 Magento 管理员无法访问

发布于 2024-09-30 00:36:22 字数 5460 浏览 2 评论 0原文

我在根目录的子目录中有 magento,如果我将安全基本 url 和安全基本 url 链接设置为正确的共享 ssl url 以启用安全页面,那么我在前端没有问题。页面按其应有的方式显示。但是,当我尝试使用下面的安全链接访问管理员时,我无法获得准入。

例如在前端: http://mydomain.com/shop 变为 http://mydomain.com - 这是正确的。

https://mydomain.sharedssl.com/shop/customer/account/login/ 变为 https://mydomain.sharedssl.com/customer/account/login/ - 这是正确的。

但是我既不能使用 https://mydomain.com/shop/index.php/admin/ 也不能使用 https://mydomain.com//index.php/admin/ 访问管理员

在根目录中,我的 htaccess 中有此内容:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/shop(.*)
RewriteRule (.*) /shop/$1 [L]

在商店(Magento)中,我有以下内容:

############################################
## 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.php

<IfModule mod_php5.c>

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

#    php_value memory_limit 64M
    php_value memory_limit 128M
    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

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

    RewriteRule  ^(.*)$ /shop/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

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

    #FileETag none 

有人可以提供一些帮助,使其在 Magento 后端工作吗?

I have magento in a subdirectory in the root and if I set the secure base url and secure base url link to the correct shared ssl url to enable secure pages I have no problem in the FRONTEND. The pages displays as they should. However when I try to access the admin with the secure link below I cannot gain admittance.

For instance in the frontend: http://mydomain.com/shop becomes http://mydomain.com - which is correct.

https://mydomain.sharedssl.com/shop/customer/account/login/ becomes
https://mydomain.sharedssl.com/customer/account/login/ - which is correct.

But then I can access admin with neither https://mydomain.com/shop/index.php/admin/ nor https://mydomain.com//index.php/admin/

In the root directory I have this in my htaccess:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/shop(.*)
RewriteRule (.*) /shop/$1 [L]

and in the shop (Magento) I have the following:

############################################
## 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.php

<IfModule mod_php5.c>

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

#    php_value memory_limit 64M
    php_value memory_limit 128M
    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

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

    RewriteRule  ^(.*)$ /shop/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

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

    #FileETag none 

Could someone lend some assistance to getting this to work in the Magento backend?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜巴黎 2024-10-07 00:36:22

问题在于获取 REQUEST_URI 环境变量值并使用 SCRIPT_FILENAMESCRIPT_NAME 环境变量值进行检查。在您的情况下,REQUEST_URI 是 /index.php/stddadmin/ , SCRIPT_FILENAME 和 SCRIPT_NAME 等于 /shop/index.php ,并且 Magento 无法检索控制器匹配的路径信息。所以问题的一个原因是在请求路径中添加了 /index.php/ 前缀,并且 Magento url 生成为管理员硬编码了这个值。

您的问题只有两种解决方案:

  1. Mage_Core_Model_Store 模型中覆盖名为 _updatePathUseRewrites 的方法,如下例所示:

     类 Your_CustomModule_Model_Store 扩展 Mage_Core_Model_Store 
     {
         受保护的_updatePathUseRewrites($ url) 
         {
             返回$url; // 返回传递的变量,不添加index.php作为前缀 
         }
     }
    

    在这种情况下,您的管理面板将在 /admin/ url 上可用,就像通常的前端页面一样。

  2. 重新组织项目结构,将 Magento 放置在根文件夹中,或在根文件夹中的每个文件和文件夹上添加符号链接。

The problem is in getting of REQUEST_URI environment variable value and checking it with SCRIPT_FILENAME and SCRIPT_NAME environment variables values. In your case REQUEST_URI is /index.php/stddadmin/ and SCRIPT_FILENAME with SCRIPT_NAME are equals to /shop/index.php and Magento unable to retrieve path info for controllers matching. So a cause of the problem is in adding of /index.php/ prefix to the request path and the Magento url generation has this value hardcoded for admin.

There are only two solutions to your problem:

  1. Override method called _updatePathUseRewrites in Mage_Core_Model_Store model like in the following example:

     class Your_CustomModule_Model_Store extends Mage_Core_Model_Store 
     {
         protected _updatePathUseRewrites($url) 
         {
             return $url; // Return passed variable without adding index.php as prefix 
         }
     }
    

    In this case your admin panel will be available at /admin/ url, like usual frontend page.

  2. Reorganize project structure for placing Magento in root folder or add symbolic links on each its file and folder in root.
喜你已久 2024-10-07 00:36:22

您还可以使用“Admin Rewrites”扩展来删除后端 URL 中的“index.php”:
http://www.magentocommerce.com/magento-connect/clockworkgeek/extension /3692/clockworkgeek_adminrewrites

它在后端启用 URL 重写,并且工作正常。唯一的缺点是它被标记为“Beta”,因为它覆盖了“Mage_Core_Model_Store”。

You can also use the "Admin Rewrites" extension to get rid of "index.php" in backend URLs:
http://www.magentocommerce.com/magento-connect/clockworkgeek/extension/3692/clockworkgeek_adminrewrites

It enables URL rewrites in the backend and it works fine. The only con is that it is marked as "Beta", because it overrides "Mage_Core_Model_Store".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文