2010-08-27 6 views
0

J'essaye d'obtenir mod_rewrite pour fonctionner avec mon site mais pour une raison quelconque cela ne fonctionne pas. J'ai déjà entré du code dans mon fichier .htaccess pour rediriger non-www vers www, donc je sais que mod_rewrite fonctionne en général.variables mod_rewrite et php

Je les URL essayer de changer sont example.com/index.php?p=home de sorte que la nouvelle URL serait example.com/page/home

Cependant, lorsque je tente ce code, je reçois simplement une 404 me disant que/page/accueil n'existe pas.

Options +FollowSymLinks 

RewriteEngine on 

RewriteRule index/p/(.*)/ index.php?p=$1 
RewriteRule index/p/(.*) index.php?p=$1 

Quelqu'un peut-il m'aider s'il vous plaît?

Répondre

1

Votre modèle ne correspond pas à l'URL de votre exemple. En supposant que votre URL d'exemple était correcte, vous vouliez cela à la place:

Options +FollowSymLinks 

RewriteEngine on 

# We want to rewrite requests to "/page/name" (with an optional trailing slash) 
# to "index.php?p=name" 
# 
# The input to the RewriteRule does not have a leading slash, so the beginning 
# of the input must start with "page/". We check that with "^page/", which 
# anchors the test for "page/" at the beginning of the string. 
# 
# After "page/", we need to capture "name", which will be stored in the 
# backreference $1. "name" could be anything, but we know it won't have a 
# forward slash in it, so check for any character other than a forward slash 
# with the negated character class "[^/]", and make sure that there is at least 
# one such character with "+". Capture that as a backreference with the 
# parenthesis. 
# 
# Finally, there may or may not be a trailing slash at the end of the input, so 
# check if there are zero or one slashes with "/?", and make sure that's the end 
# of the pattern with the anchor "$" 
# 
# Rewrite the input to index.php?p=$1, where $1 gets replaced with the 
# backreference from the input test pattern 
RewriteRule ^page/([^/]+)/?$ index.php?p=$1 
+0

Cela fonctionne parfaitement. Je pense que le ([^ /] +) /? $ Le fixe. Pourriez-vous expliquer les parties de cette expression afin que je puisse mieux le comprendre s'il vous plaît? – kaotix

+0

@kaotix - J'ai ajouté des commentaires à la règle maintenant. Je ne savais pas à quel point vous étiez familier avec les expressions régulières en général, alors j'ai essayé d'expliquer avec autant de détails que possible. –

2

Votre règle de réécriture utilise l'index/p/xxxxx mais vous voulez/page/xxxx

essayer

RewriteRule ^/page/(.*)/ index.php?p=$1 
RewriteRule ^/page/(.*) index.php?p=$1 
+0

Voici ce que je devais mettre dans mon post original. Désolé pour la confusion. – kaotix