htaccess rewritecond,以匹配开头和结尾

时间:2017-01-18 23:52:45

标签: .htaccess mod-rewrite

似乎无法重定向工作。请考虑以下事项:

 /poles/foobar.html
 /poles/foobar/doodaa.html
 /poles/foobar.html?qparam=123
 /poles/foobar/doodaa.html?qparam=123
 /poles/foobar.html?qparam=123&cat=444
 /poles/foobar/doodaa.html?qparam=123&cat=444

我目前的规则(我知道它不会抓住以上所有......但我甚至无法抓住它们中的任何一个)

 RewriteCond %{THE_REQUEST} ^/poles 
 RewriteCond %{THE_REQUEST} ^\.html$
 RewriteRule (.*) /poles/ [R=301,L]

我怎样才能捕获所有可能的url场景?它们都以 / poles / 开头,以 .html ...或 .html?queryparams

结尾

更新,我的.HTACCESS文件内容,MAGENTO2网站:

      ############################################
      ## overrides deployment configuration mode value
      ## use command bin/magento deploy:mode:set to switch modes

      #   SetEnv MAGE_MODE developer

      ############################################
      ## 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 768M
          php_value max_execution_time 18000

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

      </IfModule>

      <IfModule mod_php7.c>

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

          php_value memory_limit 768M
          php_value max_execution_time 18000

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

      </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/javascript application/x-javascript application/json image/svg+xml

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

      ############################################
      ## workaround for Apache 2.4.6 CentOS build when working via ProxyPassMatch with HHVM (or any other)
      ## Please, set it on virtual host configuration level

      ##    SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
      ############################################

      <IfModule mod_rewrite.c>

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

          Options +FollowSymLinks
          RewriteEngine on

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

          #RewriteBase /magento/

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

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

      ############################################
      ## TRACE and TRACK HTTP methods disabled to prevent XSS attacks

          RewriteCond %{REQUEST_METHOD} ^TRAC[EK]
          RewriteRule .* - [L,R=405]

      ############################################
      ## redirect for mobile user agents

          #RewriteCond %{REQUEST_URI} !^/mobiledirectoryhere/.*$
          #RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
          #RewriteRule ^(.*)$ /mobiledirectoryhere/ [L,R=302]

      ############################################
      ## 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
          AddType 'text/html; charset=UTF-8' html

      <IfModule mod_expires.c>

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

          ExpiresDefault "access plus 1 year"
          ExpiresByType text/html A0
          ExpiresByType text/plain A0

      </IfModule>

      ###########################################
      ## Deny access to root files to hide sensitive application information
          RedirectMatch 403 /\.git

          <Files composer.json>
              order allow,deny
              deny from all
          </Files>
          <Files composer.lock>
              order allow,deny
              deny from all
          </Files>
          <Files .gitignore>
              order allow,deny
              deny from all
          </Files>
          <Files .htaccess>
              order allow,deny
              deny from all
          </Files>
          <Files .htaccess.sample>
              order allow,deny
              deny from all
          </Files>
          <Files .php_cs>
              order allow,deny
              deny from all
          </Files>
          <Files .travis.yml>
              order allow,deny
              deny from all
          </Files>
          <Files CHANGELOG.md>
              order allow,deny
              deny from all
          </Files>
          <Files CONTRIBUTING.md>
              order allow,deny
              deny from all
          </Files>
          <Files COPYING.txt>
              order allow,deny
              deny from all
          </Files>
          <Files Gruntfile.js>
              order allow,deny
              deny from all
          </Files>
          <Files LICENSE.txt>
              order allow,deny
              deny from all
          </Files>
          <Files LICENSE_AFL.txt>
              order allow,deny
              deny from all
          </Files>
          <Files nginx.conf.sample>
              order allow,deny
              deny from all
          </Files>
          <Files package.json>
              order allow,deny
              deny from all
          </Files>
          <Files php.ini.sample>
              order allow,deny
              deny from all
          </Files>
          <Files README.md>
              order allow,deny
              deny from all
          </Files>
          <Files magento_umask>
              order allow,deny
              deny from all
          </Files>

      # For 404s and 403s that aren't handled by the application, show plain 404 response
      ErrorDocument 404 /pub/errors/404.php
      ErrorDocument 403 /pub/errors/404.php

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

          #FileETag none

      # ######################################################################
      # # INTERNET EXPLORER                                                  #
      # ######################################################################

      # ----------------------------------------------------------------------
      # | Document modes                                                     |
      # ----------------------------------------------------------------------

      # Force Internet Explorer 8/9/10 to render pages in the highest mode
      # available in the various cases when it may not.
      #
      # https://hsivonen.fi/doctype/#ie8
      #
      # (!) Starting with Internet Explorer 11, document modes are deprecated.
      # If your business still relies on older web apps and services that were
      # designed for older versions of Internet Explorer, you might want to
      # consider enabling `Enterprise Mode` throughout your company.
      #
      # https://msdn.microsoft.com/en-us/library/ie/bg182625.aspx#docmode
      # http://blogs.msdn.com/b/ie/archive/2014/04/02/stay-up-to-date-with-enterprise-mode-for-internet-explorer-11.aspx

      <IfModule mod_headers.c>

          Header set X-UA-Compatible "IE=edge"

          # `mod_headers` cannot match based on the content-type, however,
          # the `X-UA-Compatible` response header should be send only for
          # HTML documents and not for the other resources.

          <FilesMatch "\.(appcache|atom|bbaw|bmp|crx|css|cur|eot|f4[abpv]|flv|geojson|gif|htc|ico|jpe?g|js|json(ld)?|m4[av]|manifest|map|mp4|oex|og[agv]|opus|otf|pdf|png|rdf|rss|safariextz|svgz?|swf|topojson|tt[cf]|txt|vcard|vcf|vtt|webapp|web[mp]|webmanifest|woff2?|xloc|xml|xpi)$">
              Header unset X-UA-Compatible
          </FilesMatch>

      </IfModule>




      # CUSTOM 301 REDIRECTS
      # --------------------------------------------------------- ##


      # Custom eyelets category query param url redirects
      # -------------------------------------------------

      RewriteCond %{THE_REQUEST} ^/eyelets-3.html?(.*) 
      RewriteCond %{query_string} ^cat=233
      RewriteRule (.*) /eyelets/plastic-eyelets/? [R=301,L]

      RewriteCond %{THE_REQUEST} ^/eyelets-3.html?(.*) 
      RewriteCond %{query_string} ^cat=234
      RewriteRule (.*) /eyelets/metal-eyelets/? [R=301,L]



      # Custom poles category query param url redirects
      # -------------------------------------------------

      RewriteCond %{THE_REQUEST} ^/poles.html?(.*) 
      RewriteCond %{query_string} ^range=251
      RewriteRule (.*) /poles/? [R=301,L]



      # Custom track category query param url redirects
      # -------------------------------------------------

      RewriteCond %{THE_REQUEST} ^/track.html?(.*) 
      RewriteCond %{query_string} ^cat=104
      RewriteRule (.*) /tracks/plastic-track/? [R=301,L]

      RewriteCond %{THE_REQUEST} ^/track.html?(.*) 
      RewriteCond %{query_string} ^cat=951
      RewriteRule (.*) /tracks/metal-track/? [R=301,L]

      RewriteCond %{THE_REQUEST} ^/track.html?(.*) 
      RewriteCond %{query_string} ^cat=95&range=5391
      RewriteRule (.*) /tracks/metal-track/vogue/? [R=301,L]



      # Category url redirects
      # -------------------------------------------------

      Redirect 301 /poles.html /poles
      Redirect 301 /track.html /tracks
      Redirect 301 /curtrain-track.html /tracks
      Redirect 301 /net-suspension-products.html /net-suspension
      Redirect 301 /tiebacks-and-trimmings.html /tiebacks
      Redirect 301 /brassware-1.html /brassware
      Redirect 301 /eyelets-3.html /eyelets
      Redirect 301 /blinds.html /blinds/retail-blinds
      Redirect 301 /roman-blind-systems.html /blinds/roman-blind-systems
      Redirect 301 /shower-rail-products.html /net-suspension/shower-rail-products
      Redirect 301 /accessories-and-sundries.html /accessories
      Redirect 301 /panel-track.html /tracks/metal-track/panel-track
      Redirect 301 /valance-track.html /tracks/metal-track/aluminium-valance-rail





      # Subcategory url redirects - DOES NOT WORK
      # -------------------------------------------------
      # eg: /poles/foobar.html
      # eg: /poles/foobar/doodaa.html
      # eg: /poles/foobar.html?cat=4
      # eg: /poles/foobar/doodaa.html?cat=4

      RewriteCond %{THE_REQUEST} ^/poles 
      RewriteCond %{THE_REQUEST} ^\.html$
      RewriteRule (.*) /poles/? [R=301,L]






      # Page/Section url redirects
      # -------------------------------------------------

      Redirect 301 /downloads /resources
      Redirect 301 /about-us /about-us.html
      Redirect 301 /specialoffers /blog
      Redirect 301 /testimonials /blog
      Redirect 301 /contact-us /contact

1 个答案:

答案 0 :(得分:2)

这似乎是你想要实现的目标:

RewriteCond %{REQUEST_URI} ^/poles/.*\.html$
RewriteRule ^ /poles/? [R=301,L]

你几乎拥有它。插入符号(^)表示字符串的开头,因此需要在第二个条件下删除。他们也可以合并。查询字符串不是REQUEST_URI中匹配项的一部分,因此任何查询字符串都将匹配。 RewriteRule中的问号会删除任何查询字符串。