2010-12-10 19 views
5

estoy usando mi archivo .htaccess con mod_rewrite para crear URLs limpias como este:.htaccess añadir una barra final y la fuerza de www con URLs limpias

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . index.php [L] 
</IfModule> 

también me gustaría para forzar el sitio para tener el 'www' subdominio y lo más importante agregar una barra final si la url no tiene uno.

Soy un absoluto novato con mod_rewrite y he intentado lograr esto por mi cuenta combinando otro código que encontré en google (lo sé triste), pero siempre termino con un error de 500.

Aquí está el código que encontré para la fuerza www:

<IfModule mod_rewrite.c> 
Options +FollowSymLinks 
RewriteCond %{HTTP_HOST} ^www\.domain\.tld$ [NC] 
RewriteRule ^(.*)$ http://domain.tld/$1 [R=301,L] 
</IfModule> 

Gracias por su ayuda.

+0

hacer cualquiera de ellos trabajan solos? Descubra qué conjunto de reglas lo está rompiendo. – profitphp

+0

Sé que el primero funciona, y creo que el segundo también. Simplemente no estoy seguro de cómo combinarlo todo para obtener el resultado que quiero. – imns

Respuesta

11

Pruebe a separar la www y la barra diagonal. Esto está probado y con suerte está trabajando para usted. No dijiste si estás ejecutando la ubicación en el directorio raíz del dominio o en un subdirectorio; generalmente es una buena información cuando pides ayuda con htaccess.

RewriteEngine On 

# Assuming you're running at domain root. Change to working directory if needed. 
RewriteBase/

# 
# www check 
# If you're running in a subdirectory, then you'll need to add that in 
# to the redirected url (http://www.mydomain.com/subdirectory/$1 

RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L] 

# 
# Trailing slash check 

# Don't fix direct file links 
RewriteCond %{REQUEST_FILENAME} !-f 

RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ $1/ [L,R=301] 

# 
# Finally, forward everything to your front-controller 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* index.php [QSA,L] 

Para depurar, comentar las secciones individuales y ver lo que está/no está funcionando.

+1

¿Fue correcta esta respuesta? Estoy tratando de lograr lo mismo yo mismo (* excepto por anteponer 'www' *) No puedo hacer que esta respuesta funcione. – Dan

+0

Del mismo modo, no puedo hacer que este código funcione – DaveO

+0

Probado y todavía funciona bien para mí. ¿Qué parte exactamente no está funcionando? La barra inclinada, el avance a index.php, o el www? – Leniency

1

Utilice esta y se olvidó de sus problemas;)

<IfModule mod_rewrite.c> 
Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] 
RewriteRule ^(.*?)/*$ http://%1/$1/ [L,R=301] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ http://your-domain.ru/$1/ [L,R=301] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 [L] 
</IfModule> 
Cuestiones relacionadas