2011-04-08 22 views

Respuesta

18

Crear un archivo .htaccess en la raíz de su web e introduzca allí siguiendo:

Options +FollowSymLinks 
RewriteEngine on 

RewriteRule ^product/([0-9]+)$ product.php?id=$1 
+0

¿Qué estrategia usar para product.php? Id = 777 & storage = usa – Tuco

+1

¿Esto solo subiría a 9 ya que no tiene el cuantificador?^product/([0-9] +) $ product.php? id = $ 1 –

+1

RewriteRule^product/([0-9] +)/storage /(.*)$ product.php? id = $ 1 & storage = $ 2 –

1

esto tiene algo que ver con la reescritura de URL, esto es algo que normalmente configuración con el módulo mod_rewrite en Apache

urlrewriting

+0

esto debería haber sido publicado como un comentario. – drudge

+0

lo siento, quería ayudar, no tengo reputación para comentar todavía. – FRoZeN

9

En vez de usar mod_rewrite que también puede utilizar el siguiente en .htaccess:

DefaultType application/x-httpd-php 

Y simplemente llame su script product en el servidor (sin extensión de archivo .php).

Así se puede invocar directamente y recibiría cualquier cadena que figura como $_SERVER["PATH_INFO"]

+0

Sin embargo, existen algunas implicaciones de seguridad importantes al hacer esto, especialmente si la aplicación permite cargar usuarios. Si un usuario malintencionado puede cargar un archivo y ponerle un nombre con una extensión que Apache no recibe instrucciones explícitas de tratar como algo distinto de PHP, podrá ejecutar código PHP en el servidor. –

+0

De hecho. Espero que las ramificaciones de seguridad sean obvias. Pero por las dudas: la configuración debe restablecerse en los subdirectorios donde no sea necesario. Particularmente en áreas de escritura mundial. (Que OTOH no debería estar debajo del webroot de todos modos.) – mario

1

Esto es algo que los marcos como CodeIgniter y Zend lo logra con facilidad, pero aún se puede lograr solo con el mod_rewrite de Apache, como han sugerido otros. Básicamente, utilice un .htaccess como esta para dirigir todo el tráfico a una página:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

     RewriteCond      %{REQUEST_FILENAME} !-f 
     RewriteCond      %{REQUEST_FILENAME} !-d 
    RewriteRule     ^(.*)$ index.php?_url=$1 [QSA,L] 
</IfModule> 

Una vez que llegue en esa página se puede analizar que _url variable, que puede ser cualquier formato que desee, y manejar la petición apropiada .

+0

No CodeIgniter/Zend/Symfony/etc. todos necesitan aprovechar mod_rewrite para lograr lo que el OP está buscando de todos modos? –

+1

Sí, lo que quise decir es que si usa SIMPLEMENTE 'mod_rewrite' tiene que atornillar todo ese enrutamiento usted mismo, pero los marcos tienen todo ese enrutamiento por defecto, así que todo lo que tiene que hacer es habilitar' mod_rewrite'. –

+0

Buen punto. Gracias por aclararlo. –

1

Para mí este código de trabajo:

en "/etc/apache2/sites-available/default" o "httpd.conf"

que debe tener (al menos) estas opciones en el directorio predeterminado

... 
    <Directory /> 
     ... 
     Options FollowSymLinks 
     AllowOverride All 
     ... 
    </Directory> 
... 

o en el directorio de sitio a sitio específico

... 
    <Directory "/var/www/my-site"> 
     ... 
     Options FollowSymLinks 
     AllowOverride All 
     ... 
    </Directory> 
... 

y crear (puede que no exista, asegúrese de que sea legible por apache) o edite el ".htaccess" en el directorio del sitio (por ejemplo "/var/www/my-site/.htaccess ") y añadir este código:

AddType application/x-httpd-php htm html php 
AddHandler application/x-httpd-php .htm .html 

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 
+0

Este catchall fallaría si el uri es /hello.world – Jacques

0

hice esto durante años utilizando la siguiente para ejecutar un archivo denominado 'Soporte' (NO support.php, no quería dos maneras de obtener acceso al archivo).

<Files Support> 
    SetHandler php-script 
</Files> 

Sin embargo, he comenzado a tener problemas con esto cuando uso Plesk para ejecutar scripts como PHP 7.0. La raíz (.com/index.php) funcionaría como PHP 7, pero cualquiera de mis archivos php-script (.com/Support) se ejecutaría como mi versión de PHP 5.4 predeterminada de Plesk.Todavía tengo que descubrir por qué lo hago, pero se soluciona el problema de establecer un controlador predeterminado.