it-swarm.com.de

Was kann dazu führen, dass RewriteRule nur für bestimmte Seiten funktioniert?

Gibt es externe Faktoren (dh nicht in der Datei .htaccess), die dazu führen können, dass RewriteRule nicht für bestimmte URLs (von vorhandenen Seiten) funktioniert?

Ich habe den folgenden Code in der .htaccess -Datei (es führt eine Umleitung durch, aber nicht für alle URLs):

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php

RewriteCond %{HTTP_Host} !^(www\.)?example\.com$
RewriteRule (.*) http://example.com/$1 [R=301,L,QSA]
</IfModule>

[Bearbeiten] Ich habe bereits einige Änderungen vorgenommen, seit ich die Frage zum ersten Mal gestellt habe. Änderungen, die keine Verbesserung in Bezug auf die Art und Weise der Weiterleitung gebracht haben - das Problem muss also noch gelöst werden.

Der gesamte Inhalt der .htaccess -Datei ist:

Options +FollowSymLinks -MultiViews

RewriteEngine on

AddHandler x-httpd-php .html .htm

<ifModule mod_gzip.c>
  mod_gzip_on Yes
  mod_gzip_dechunk Yes
  mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
  mod_gzip_item_include handler ^cgi-script$
  mod_gzip_item_include mime ^text/.*
  mod_gzip_item_include mime ^application/x-javascript.*
  mod_gzip_item_exclude mime ^image/.*
  mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

<ifModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType text/html "access plus 1 seconds"
  ExpiresByType image/gif "access plus 2592000 seconds"
  ExpiresByType image/jpeg "access plus 2592000 seconds"
  ExpiresByType image/png "access plus 2592000 seconds"
  ExpiresByType text/css "access plus 2592000 seconds"
  ExpiresByType text/javascript "access plus 216000 seconds"
  ExpiresByType application/x-javascript "access plus 216000 seconds"
</ifModule>

<ifModule mod_headers.c>
  <filesMatch "\\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
    Header set Cache-Control "max-age=2592000, public"
  </filesMatch>

  <filesMatch "\\.(css)$">
    Header set Cache-Control "max-age=2592000, public"
  </filesMatch>

  <filesMatch "\\.(js)$">
    Header set Cache-Control "max-age=216000, private"
  </filesMatch>

  <filesMatch "\\.(xml|txt)$">
    Header set Cache-Control "max-age=216000, public, must-revalidate"
  </filesMatch>

  <filesMatch "\\.(html|htm|php)$">
    Header set Cache-Control "max-age=1, private, must-revalidate"
  </filesMatch>
</ifModule>

<ifModule mod_headers.c>
  Header unset ETag
</ifModule>

FileETag None    

<ifModule mod_headers.c>    
  Header unset Last-Modified
</ifModule>

RewriteCond %{HTTP_Host} !^(www\.)?example\.com$
RewriteRule .? http://example.com%{REQUEST_URI} [R=301,L]

#BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php
</IfModule>
# END WordPress
1
keiki

Alte Antwort

.htaccess schreibt die Arbeit von oben nach unten. Sobald eine Neu-Schreib-Übereinstimmung gefunden wurde, stoppt Apache dort. Also müssen Sie Ihre Neuausrichtung zuerst wie folgt setzen:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_Host} !^(www\.)?domain\.com$
RewriteRule (.*) http://domain.com/$1 [R=301,L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php

</IfModule>

Neue Antwort

anstatt von:

RewriteCond %{HTTP_Host} !^(www\.)?domain\.com$
RewriteRule .? http://domain.com%{REQUEST_URI} [R=301,L]

versuchen:

    RewriteCond %{HTTP_REFERER} !^http://(.+\.)?domain\.com/ [NC]
    RewriteRule (.*) http://domain.com/$1 [R=301,L]

Oder wenn das nicht funktioniert, versuchen Sie:

    RewriteCond %{HTTP_REFERER} !^http://(.+\.)?domain\.com(.+)? [NC]
    RewriteRule (.*) http://domain.com/$1 [R=301,L]
1
Emmanuel