2016-08-02 9 views
2

ich die URL untenentfernen Endung .php und ersetzen/mit Fragezeichen

http://localhost/gbm/file/services

nehmen müssen und es zu

http://localhost/gbm/file.php?param=services

Mit dem Code in .htaccess senden Ich habe Jetzt wird nur die .php Erweiterung entfernt, aber nicht / ersetzt und die andere Zeichenfolge id=

hinzugefügt
Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase /gbm/ 

## don't touch /forum URIs 
RewriteRule ^forums/ - [L,NC] 

## hide .php extension snippet 

# To externally redirect /dir/foo.php to /dir/foo 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] 
RewriteRule^%1 [R,L] 

# To internally forward /dir/foo to /dir/foo.php 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*?)/?$ $1.php [L] 

# To remove www header 
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [L,R=301] 
RewriteRule ^gbm/(\w+)/(.*) /gbm/$1.php/?param=$2 
+0

Versuchen Sie ersetzen [L] (letzten) Flagge mit [QSA] (Query-String Append) wie folgt aus: 'RewriteRule^(. *?)/$ 1 $?. php [QSA] '- [L] Flag weist den Server an, Verarbeitungsregeln zu stoppen, so dass es nicht die letzte Regel erreicht, die' param' an die Abfragezeichenfolge anhängen soll – Kleskowy

+0

Dennoch hängt es den Parameter nicht an Query String –

Antwort

1

Sie verwenden können:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase /gbm/ 

## don't touch /forum URIs 
RewriteRule ^forums/ - [L,NC] 

# To remove www header 
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
RewriteRule^http://%1%{REQUEST_URI} [L,R=301,NE] 

RewriteCond %{THE_REQUEST} /(\w+)\.php\?param=([^\s&]+) [NC] 
RewriteRule^%1/%2? [R=301,L,NE] 

## hide .php extension snippet 

# To externally redirect /dir/foo.php to /dir/foo 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] 
RewriteRule^%1 [R=301,NE,L] 

# handle ?param=... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/gbm/$1\.php -f 
RewriteRule ^(.+)/([\w-]+)/?$ $1.php?param=$2 [L,QSA] 


# To internally forward /dir/foo to /dir/foo.php 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*?)/?$ $1.php [L] 
+0

Es macht die URL wie folgt ... http: // localhost/gbm/file –

+0

Verwenden Sie diese Regeln in meinem .htaccess, wenn ich im Browser "http: //localhost/file.php? param = services" eingeben es wird umgeleitet zu "http: // localhost/gbm/file/services" – anubhava

+0

Versuchen Sie es umgekehrt. Ich muss "http: // localhost/gbm/file/services" zu "http: //localhost/file.php? Param = services" intern –