tag plugin manager keywords insertar google description como colocar agregar wordpress .htaccess codeigniter

plugin - wordpress add meta keywords



Wordpress y regla de reescritura de CI en htaccess (4)

He instalado WordPress en example.com. También instalé CodeIgniter en la carpeta ci aquí example.com/ci/ , ci es el nombre de la carpeta, register es el nombre del controlador y la URL de trabajo de CI es example.com/ci/register . Mi URL base comienza con https: //.

Ahora tengo un URL de WordPress example.com/hotel , el hotel es la página que he creado en el administrador de WordPress, funciona bien.

Quiero ejecutar la ruta de mi CI como example.com/hotel/ci/register , creo que podemos hacerlo con alguna regla de reescritura para que mi URL se vea como example.com/hotel/ci/register . He agregado htaccess para wordpress que me redirige aquí example.com/hotel/ci/register . Me está mostrando el 404 error de CI. Significa que ahora estoy en CI. Ahora hice cosas siguientes en el archivo routes.php .

$route[''default_controller''] = ''register''; $route[''404_override''] = ''register'';

Ahora esta URL example.com/hotel/ci/register está funcionando, pero esta no es la forma correcta, la próxima vez que haya más controladores, entonces no funcionará.

Nota : No puedo crear una carpeta de hotel porque hotel es una página en WordPress. Si creo una carpeta de hotel , WordPress URL example.com/hotel/ no funcionará. Redirigirá la página de WordPress a la carpeta del hotel . Así que tengo que hacerlo sin crear carpeta de hotel . Tenga en cuenta example.com = myurl.com.

Necesito encontrar otra buena solución. ¿Algún consejo u orientación sería muy apreciado?

La siguiente es mi regla de reescritura en wordpress htaccess :

# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^/?hotel/ci/register(/.*)?$ /ci/$1 [L] RewriteRule ^index/.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress

Y a continuación es mi IC htaccess :

<IfModule mod_rewrite.c> RewriteEngine on RewriteCond $1 !^(index/.php|resources|robots/.txt) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L,QSA] </IfModule>


Creo que estás en el camino correcto, prueba esto:

# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^/hotel/ci(/.*)?$ /ci/$1 [L] # remove the register part # so that it would be handled by CI # also remove the "?" in front of hotel RewriteRule ^index/.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress

mantén tu IC htaccess tal como es:

<IfModule mod_rewrite.c> RewriteEngine on RewriteCond $1 !^(index/.php|resources|robots/.txt) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L,QSA] </IfModule>

la última parte es hacer coincidir su config.php CI con su nuevo modelo de url

$config[''base_url''] = "http://example.com/hotel/ci/";


No creo que esta sea la gran respuesta de su pregunta, pero si me encuentro con el mismo problema, usaré las routes consulte el código de ejemplo.

$route[''(:any)/ci/register''] = "register";

lo que hará el código anterior (:any) significa cualquier palabra en el primer uri y después de eso, puede definir cualquier url que desee. Definí ci/register . También puede hacerlo así.

$route[''(:any)/register''] = "here_you_can_add_your_controller/function";

Esto funcionará si se golpea la URL de esta manera.

http://www.example.com/any_word_you_want/register

golpeará su función de control. Necesita hacer echo algo y se mostrará en su navegador.

También puede definir la palabra de hotel en su url base como @ am05mhz muestra en su respuesta, pero no creo que sea una buena idea porque en el futuro puede tener 2 palabras más en su url.

Nota: el ejemplo del código anterior solo funciona si su .htaccess da acceso a las rutas como muestra en su pregunta, el .htaccess es un trabajo para usted. Para obtener un conocimiento completo de las rutas, consulte la documentación del código URI codeigniter


Problema interesante! Configuré un contenedor de Docker con una nueva instalación de Wordpress y Codeigniter, creé una página de hotel en WP, un controlador de Register y una vista en CI, y obtuve las pruebas. Pasé demasiado tiempo en esto, pero encontré una respuesta.

Primero, tu WordPress .htaccess . Como @tobiv señaló en un comentario, no debe agregar nada entre los comentarios de BEGIN/END WordPress , ya que podría ser golpeado por una actualización de WP. Sin embargo, su redireccionamiento debe venir antes de las reglas estándar de WP, así que agréguelo en la parte superior del archivo:

<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^hotel/ci/register /ci/register [L] </IfModule> # BEGIN WordPress # ... These are the default, unchnaged WP rules <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index/.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>

<IfModule mod_rewrite.c> y RewriteEngine On están duplicados, lo que parece desordenado, pero los necesita, ya que su nueva regla debe ir primero para que procese la solicitud antes de que lo hagan las reglas de WP.

No es necesario modificar el archivo .htaccess Codeigniter, el predeterminado es todo lo que necesita. Debería estar en la raíz de su instalación de Codeigniter, ci/.htaccess :

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

En este punto, https://example.com/hotel/ci/register mostrará la página Codeigniter 404. Si tiene el registro habilitado (consulte config/config.php ), y observa el archivo de registro, verá por qué:

ERROR - 2017-11-14 17:57:20 --> 404 Page Not Found: Hotel/ci

Y aquí está la raíz de todo el problema. Dado que el redireccionamiento inicial es un redireccionamiento interno (significa que la URL que se muestra en el navegador no cambia), el Codeigniter URI que se recibe para procesar es el que aún se muestra en la barra de direcciones del navegador: hotel/ci/register . Codeigniter intentará manejar una solicitud como esa de dos maneras:

  • Busque una ruta que coincida en application/config/routes.php

  • O busque un controlador llamado application/controllers/Hotel.php , con un método llamado ci ;

En nuestro caso, no hay un controlador de Hotel ni una ruta para describir cómo manejar dicha solicitud, por lo tanto, boom, 404.

Una solución simple es crear una ruta para manejar esta solicitud:

$route[''hotel/ci/register''] = ''register/index'';

¡Y ahora https://example.com/hotel/ci/register funciona!

Notas:

  • Configurar su ruta predeterminada para register ( $route[''default_controller''] = ''register''; ) significa que https://example.com/ci/ también mostrará el registro. No estoy seguro si quieres eso? Es posible que tenga problemas de SEO de contenido duplicado si la URL muestra lo mismo que https://example.com/hotel/ci/register , así que tal vez quiera algo más, o un 404, allí.

  • Asegúrese de eliminar su $route[''404_override''] = ''register''; ruta;

  • CI base_url no es relevante para este problema, aunque obviamente debe configurarse. Dependiendo de cómo quiera que sean sus enlaces, creo que http://example.com/ci/ o http://example.com/hotel/ci/ serían correctos.

  • No estoy muy seguro de cuál es el propósito de esta condición en su IC .htaccess para:

    RewriteCond $1 !^(index/.php|resources|robots/.txt)

    Las condiciones predeterminadas existentes ya omiten los archivos y directorios que existen en el disco. Eso es lo que significan las condiciones !-f y !-d : "si el patrón solicitado no coincide con un archivo o directorio en el disco, haga la redirección".

    Si tiene un archivo robots.txt en el disco (en su ci/ dir), y alguien solicita https://example.com/ci/robots.txt , la condición !-f fallará y se omitirá la reescritura, es decir, la solicitud se maneja sin reescrituras y el robots.txt se devuelve correctamente. Lo mismo para index.php . Si tiene un directorio llamado ci/resources , y alguien solicita https://example.com/ci/resources , la condición !-d fallará, se omite la redirección y la solicitud se realiza correctamente.

    No estoy seguro de su parte de resources , pero quizás pueda eliminar esa condición por completo.

  • Si no necesita URL bonitas de Codeigniter (me refiero a https://example.com/hotel/ci/register , este cambio no lo afectará), y resulta que no necesita esa condición adicional arriba , puedes deshacerte completamente del .htaccess para simplificar las cosas. Para hacer eso, simplemente cambie la RewriteRule de RewriteRule Wordpress a la versión no bonita:

    RewriteRule ^hotel/ci/register /ci/index.php/register [L]

    Y borra tus IC .htacces .


Utilice htaccess [P] flag en su lugar.

Asegúrese de que la cadena de sustitución (destino) comience con http:// . De lo contrario, tratará la cadena de sustitución como una ruta de archivo interna.

Compruebe el código de abajo.

# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^/?hotel/ci/(.*)?$ http://example.com/ci/$1 [P] # If you want rewrite any URI as long it has */ci/* in it. # Use the following rule instead. # RewriteRule ^(.*)/ci/(.*)?$ http://example.com/ci/$1 [P] RewriteRule ^index/.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress

Además, no es necesario actualizar la URL base de CI. Cadena vacía hará.

$config[''base_url''] = '''';

Espero que ayude.

Campo de golf:
https://httpd.apache.org/docs/current/rewrite/flags.html#flag_p