2012-10-18 23 views
10

Próbuję ustawić przepisywanie ścieżek na dwóch oddzielnych serwerach, jeden z użyciem mod-przerobić na Apache i jeden przy użyciu HttpRewriteModule na Nginx. Nie sądzę, że próbuję zrobić coś zbyt skomplikowanego, ale moje umiejętności w zakresie regresji są trochę słabe i mogłem naprawdę skorzystać z pomocy.Przepisywanie adresu URL do ciągu zapytania na Apache i Nginx

Konkretnie, Próbuję przekształcić sformatowany URL w ciągu kwerendy, tak, że związek sformatowane tak:

http://www.server.com/location/ 

wskazywałoby na to:

http://www.server.com/subdirectory/index.php?content=location 

coś ekstra na koniec sformatowanego adresu URL należy dołączyć do parametru "content" w ciągu zapytania, a więc:

http://www.server.com/location/x/y/z 

powinien wskazywać na to:

http://www.server.com/subdirectory/index.php?content=location/x/y/z 

Jestem całkiem pewien, że to powinno być możliwe przy użyciu zarówno Apache mod-rewrite i Nginx HttpRewriteModule na podstawie badań robiłem, ale nie widzę, aby dostać pracy . Jeśli ktoś mógłby dać mi wskazówki, jak ułożyć wyrażenia dla jednej lub obu tych konfiguracji, byłbym bardzo wdzięczny. Dzięki!

Odpowiedz

3

Wyszukaj ciąg: (.+)/location/(.*)$

wymiana ciąg: $1/subdirectory/index.php?content=location/$2

+0

To złapać nazwę serwera w pierwszej grupie, która nie jest niezbędne dla przepisać. – JosefScript

3

dla Apache, w pliku .htaccess w katalogu głównym dokumentu, dodać:

RewriteEngine On 
RewriteCond %{REQUEST_URI} !^/subdirectory/index\.php$ 
RewriteRule ^(.*)$ /subdirectory/index.php?content=$1 [L] 

W nginx, chcesz najpierw upewnij się, Żądania dotyczące /subdirectory/index.php przejść przez, a następnie przepisać wszystko inne:

location ~ /subdirectory/index\.php$ 
{ 
} 

location/
{ 
    rewrite ^(.*)$ /subdirectory/index.php?content=$1 break; 
} 
+0

Nie ma potrzeby wykonywania dwóch kroków. Jeśli złapiesz "location" z wyrażeniem regularnym, bezpośrednie żądania do "podkatalogu" zawsze będą przekazywane. – JosefScript

5

W nginx dopasujesz "/ location" w dyrektywie przepisywania, przechwytywanie łańcucha ogonującego w zmiennej $ 1 i dołączanie do łańcucha zastępczego.

server { 
... 
rewrite ^/location(.*)$ /subdirectory/index.php?content=location$1 break; 
... 
} 

W httpd.conf Apache to wygląda dość podobnie:

RewriteEngine On 
RewriteRule ^/location(.*)$ /subdirectory/index.php?content=location$1 [L] 

Zapraszamy do obejrzenia przykładów na końcu tej strony: https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

Powiązane problemy