2013-04-11 5 views
1

J'ai actuellement une URL qui ressemble à ceci:Comment supprimer l'extension .php et ajoutez un slash dans le dossier spécifique avec .htaccess

www.mysite.com/folder-name/page-name.php 

mais j'ai besoin de ressembler à ceci:

www.mysite.com/folder-name/page-name/ 

Je suis après une expression régulière pour le .htaccess qui va dans "nom-dossier" et cible uniquement le dossier dans lequel il se trouve. Il doit supprimer l'extension .php et rediriger vers une URL avec une barre oblique à la fin fin.

De plus, si l'URL est www.mysite.com/folder-name/, j'ai besoin que l'expression soit ignorée pour éviter un // à la fin. J'ai jeté un coup d'oeil mais n'ai pas pu trouver une solution pour juste un dossier particulier. Juste en commençant par PHP et regex sont en train de me faire peur!

J'ai trouvé le code comme ceci:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+.php 
RewriteRule (.*).php$ /$1/ [L,R=301] 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*)/$ $1.php [L] 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule .*[^/]$ $0/ [L,R=301] 

mais il retourne urls vers ceci:

www.mysite.com/var/www/vhosts/mysite.com/httpdocs/folder_name/page_name/ 
+0

RewriteEngine On RewriteCond% {de REQUEST_FILENAME} -f RewriteRule^([.^\] +) $ $ 1.php [NC, L] Je peux enlever le .php avec ceci. Juste ne sais pas comment ajouter la barre oblique – user2136584

Répondre

0

La raison pour laquelle vous avez trouvé le chemin comme ça parce que apache est deviner si votre La cible de la règle ($0/) est un chemin de fichier ou un chemin d'URL, et il devine incorrectement qu'il s'agit d'un chemin de fichier. Vous devez soit fournir une base de réécriture:

RewriteBase/

ou faire vos cibles URI absolu de

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*)/$ /$1.php [L] 

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule .*[^/]$ /$0/ [L,R=301] 
+0

Brilliant, est-il un moyen de RewriteBase pas comme la racine à/mais un niveau vers le bas dans un dossier ce n'est pas absolu? – user2136584

+0

@ user2136584 Vous ne savez pas ce que vous voulez dire, le baes est essentiellement ce qui vient après votre nom d'hôte dans 'http: // hostname.com', donc'/'signifie' http: // hostname.com/'et/foo /' signifie 'http: // nom d'hôte.com/foo /' –

Questions connexes