Apache-2.2

.htaccess 500 內部伺服器錯誤,錯誤標誌

  • September 6, 2012

我想將以下內容添加到我的 Magento .htaccess 文件中:

RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
RewriteRule ^index.php$ http://www.mystore.com/ [R=301,L]

然而,事實證明這是一個 500 內部伺服器錯誤。

日誌檢查結果:

RewriteCond:錯誤的標誌分隔符

有沒有辦法重寫或以某種方式解決問題?

編輯:我目前的 htaccess 文件:

   Options -Indexes

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

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

       DirectoryIndex index.php

   <IfModule mod_php5.c>

   ############################################
   ## 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 application/x-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 .* 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

       ExpiresActive On
       ExpiresByType text/css "access plus 30 days"
       ExpiresByType text/javascript "access plus 7 days"
       ExpiresByType application/x-javascript "access plus 7 days"
       ExpiresByType application/javascript "access plus 7 days"
       ExpiresByType image/x-icon "access plus 7 days"
       ExpiresByType image/png "access plus 3 months"
       ExpiresByType image/gif "access plus 3 months"
       ExpiresByType image/jpeg "access plus 3 months"
       ExpiresByType image/jpg "access plus 3 months"
       ExpiresByType application/x-shockwave-flash "access plus 3 months"

   </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

問題在這裡:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/

空格分隔意味著僅^[A-Z]{3,9}將其視為正則表達式的一部分(其餘部分被視為標誌 - 正如您所發現的那樣效果不佳)。

你需要用引號括起來:

RewriteCond %{THE_REQUEST} "^[A-Z]{3,9} /index\.php HTTP/"

或者更好的是,只需使用具有不那麼挑剔的匹配字元串的等價物。

RewriteCond %{REQUEST_URI} ^/index\.php$

引用自:https://serverfault.com/questions/424786