it-swarm.com.de

.htaccess RewriteRule $ 1 enthält einen falschen Wert

Ich habe eine RewriteRule, die sich nicht wie erwartet verhält. Ich möchte, dass site.com/author/fredsite.com/author/index.php?a=fred zugeordnet wird

Ich habe ein Autorenverzeichnis im Site-Stammverzeichnis. Das Autorenverzeichnis enthält die folgende .htaccess-Datei.

Mein Problem ist, dass $1 den Wert index.php anstelle der Regex-Übereinstimmung enthält.

Die gesamte .htaccess-Datei befindet sich unten. Kannst du meinen Fehler sehen? Danke.

Options +FollowSymlinks
RewriteEngine on

RewriteRule ([^/]+)/?$  index.php?a=$1 [NC,L]
1
Eric

Ihr Muster ([^/]+)/?$ stimmt sowohl mit fred als auch mit index.php überein.

Der Schlüssel hier - wie das [L] -Flag funktioniert. Nach dem erstmaligen Umschreiben von fred wird mit der nächsten Umschreib-Iteration fortgefahren, in der index.php?a=fred in index.php?a=index.php umgeschrieben wird. Da die URL umgeschrieben wurde, geht es zur dritten Iteration, in der index.php?a=index.php auf dieselbe URL index.php?a=index.php umgeschrieben wird. Da Eingabe- und Ausgabe-URLs identisch sind, schreiben Sie die Exits neu und Sie haben das, was Sie gerade haben.

Sie müssen eine Bedingung hinzufügen, um ein Schleifen zu verhindern. Zum Beispiel (einer der möglichen Ansätze):

RewriteCond %{REQUEST_URI} !index\.php$
RewriteRule ([^/]+)/?$  index.php?a=$1 [NC,L]

oder

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([^/]+)/?$  index.php?a=$1 [NC,L]

oder auch

RewriteRule (?!index\.php)([^/]+)/?$  index.php?a=$1 [NC,L]

Lesen Sie etwas mehr: RewriteRule Last [L] -Flag funktioniert nicht?

7
LazyOne