htaccess RewriteRule results in 404 responseWhy do I get a double trailing slash depending on where my RewriteRule is located?Additionally, a 404 Not Found.htaccess & Mod_RewriteHow to exclude a sub-folder from HTaccess RewriteRuleInstalling wordpress in sub-directory with .htaccess in root directory.htaccess https redirect best methodExecute a PHP File Without the .PHP Extension on IISNginx rewrite, from htaccess-filesFix ERR_TOO_MANY_REDIRECTS after adding trailing slash in URLmod_rewrites in nested .htaccess causing strange 404

A map of non-pathological topology?

Sci-fi novel: ark ship from Earth is sent into space to another planet, one man woken early from cryosleep paints a giant mural

Teaching a class likely meant to inflate the GPA of student athletes

Is this a bug in plotting step functions?

First sign that you should look for another job?

If I leave the US through an airport, do I have to return through the same airport?

Separate SPI data

Longest bridge/tunnel that can be cycled over/through?

How to trick the reader into thinking they're following a redshirt instead of the protagonist?

Fermat's statement about the ancients: How serious was he?

Why did Intel abandon unified CPU cache?

Proving that a Russian cryptographic standard is too structured

Russian word for a male zebra

Advantages of the Exponential Family: why should we study it and use it?

What would be the way to say "just saying" in German? (Not the literal translation)

How can I remove material from this wood beam?

Why am I getting a strange double quote (“) in Open Office instead of the ordinary one (")?

Is it possible to have 2 different but equal size real number sets that have the same mean and standard deviation?

What is the logic behind taxing money for property?

With Ubuntu 18.04, how can I have a hot corner that locks the computer?

How to publish items after pipeline is finished?

Next date with distinct digits

Does putting salt first make it easier for attacker to bruteforce the hash?

What differences exist between adamantine and adamantite in all editions of D&D?



htaccess RewriteRule results in 404 response


Why do I get a double trailing slash depending on where my RewriteRule is located?Additionally, a 404 Not Found.htaccess & Mod_RewriteHow to exclude a sub-folder from HTaccess RewriteRuleInstalling wordpress in sub-directory with .htaccess in root directory.htaccess https redirect best methodExecute a PHP File Without the .PHP Extension on IISNginx rewrite, from htaccess-filesFix ERR_TOO_MANY_REDIRECTS after adding trailing slash in URLmod_rewrites in nested .htaccess causing strange 404






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








1















I have a website that is in the root folder. It has a .htaccess with teh code below:



RewriteEngine on
RewriteRule ^(.*)/$ $1.php


When I open http://example.com/login/ I get a "404 Not Found" error but when I open http://example.com/login without the trailing / the URL opens without any problem.



I need .htaccess code to set in the root directory to open PHP file like login.php as /login/ or /login (without trailing /).










share|improve this question






























    1















    I have a website that is in the root folder. It has a .htaccess with teh code below:



    RewriteEngine on
    RewriteRule ^(.*)/$ $1.php


    When I open http://example.com/login/ I get a "404 Not Found" error but when I open http://example.com/login without the trailing / the URL opens without any problem.



    I need .htaccess code to set in the root directory to open PHP file like login.php as /login/ or /login (without trailing /).










    share|improve this question


























      1












      1








      1








      I have a website that is in the root folder. It has a .htaccess with teh code below:



      RewriteEngine on
      RewriteRule ^(.*)/$ $1.php


      When I open http://example.com/login/ I get a "404 Not Found" error but when I open http://example.com/login without the trailing / the URL opens without any problem.



      I need .htaccess code to set in the root directory to open PHP file like login.php as /login/ or /login (without trailing /).










      share|improve this question
















      I have a website that is in the root folder. It has a .htaccess with teh code below:



      RewriteEngine on
      RewriteRule ^(.*)/$ $1.php


      When I open http://example.com/login/ I get a "404 Not Found" error but when I open http://example.com/login without the trailing / the URL opens without any problem.



      I need .htaccess code to set in the root directory to open PHP file like login.php as /login/ or /login (without trailing /).







      .htaccess mod-rewrite rewrite






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited May 24 at 21:57









      DocRoot

      20519




      20519










      asked Aug 19 '12 at 15:48









      MahmoodMahmood

      62




      62




















          2 Answers
          2






          active

          oldest

          votes


















          0














          Try ^([^/]+)/?$ and see if it works as expected.






          share|improve this answer

























          • After try this code RewriteEngine on RewriteRule ^([^/]+)/?$ $1.php i got 500 error

            – Mahmood
            Aug 19 '12 at 16:21












          • By simply making the trailing slash optional (and still having an all-encompassing capturing subpattern) you would expect this to create a rewrite loop (hence the 500 error). A request for /login/ would rewrite to /login.php to /login.php.php to /login.php.php.php, etc.

            – DocRoot
            May 24 at 21:33


















          0














          This behavior is typical of a conflict with MuiltiViews. You should disable MultiViews at the top of your .htaccess file:



          Options -MultiViews


          This explains why /login without the trailing / successfully serves the file - your RewriteRule is entirely bypassed in this scenario.



          With MultiViews enabled, when requesting /login/, mod_negotiation mocks up a rewrite map and issues an internal subrequest for /login.php before mod_rewrite gets to process the URL. The path-info (trailing /) is added back, to become /login.php/. This is passed back for further processing and matches your overly-generic (^(.*)/$) RewriteRule pattern, resulting in an internal rewrite to /login.php.php/ etc. Depending on your config, this could result in a 403 (as it can result in a malformed request), or a 404 (as you appear to be seeing).



          Disabling MultiViews alone (as mentioned above) would solve this problem. However, you should also consider making your RewriteRule pattern more restictive. For example, to avoid matching URLs that already contain a dot (ie. have a file extension):



          RewriteRule ^([^.]+)/$ $1.php [L]


          Simply making the regex more restrictive may even "fix" the error. However, it would be MultiViews making the internal subrequest, not mod_rewrite (your rule would simply be bypassed).




          as /login/ or /login (with or without the trailing /)




          To allow the rule to work with either /login/ or /login (ie. with or without the trailing slash) you would need to make the trailing slash optional, ie. /?. But you would also need to either make the preceding pattern non-greedy or include the slash in the negated character class in order to avoid capturing the trailing slash in the backreference.



          For example, either:



          RewriteRule ^([^.]+?)/?$ $1.php [L]


          Or,



          RewriteRule ^([^./]+)/?$ $1.php [L]


          But the second rule would only work with URLs that contain a single path segment, whereas the first would work with a URL of the form /foo/bar/login.



          In Summary



          Options -MultiViews

          RewriteEngine On
          RewriteRule ^([^.]+?)/?$ $1.php [L]





          share|improve this answer

























            Your Answer








            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "2"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fserverfault.com%2fquestions%2f419092%2fhtaccess-rewriterule-results-in-404-response%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            Try ^([^/]+)/?$ and see if it works as expected.






            share|improve this answer

























            • After try this code RewriteEngine on RewriteRule ^([^/]+)/?$ $1.php i got 500 error

              – Mahmood
              Aug 19 '12 at 16:21












            • By simply making the trailing slash optional (and still having an all-encompassing capturing subpattern) you would expect this to create a rewrite loop (hence the 500 error). A request for /login/ would rewrite to /login.php to /login.php.php to /login.php.php.php, etc.

              – DocRoot
              May 24 at 21:33















            0














            Try ^([^/]+)/?$ and see if it works as expected.






            share|improve this answer

























            • After try this code RewriteEngine on RewriteRule ^([^/]+)/?$ $1.php i got 500 error

              – Mahmood
              Aug 19 '12 at 16:21












            • By simply making the trailing slash optional (and still having an all-encompassing capturing subpattern) you would expect this to create a rewrite loop (hence the 500 error). A request for /login/ would rewrite to /login.php to /login.php.php to /login.php.php.php, etc.

              – DocRoot
              May 24 at 21:33













            0












            0








            0







            Try ^([^/]+)/?$ and see if it works as expected.






            share|improve this answer















            Try ^([^/]+)/?$ and see if it works as expected.







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Aug 19 '12 at 18:15









            HopelessN00b

            48.7k25117194




            48.7k25117194










            answered Aug 19 '12 at 16:16









            MoakMoak

            2442627




            2442627












            • After try this code RewriteEngine on RewriteRule ^([^/]+)/?$ $1.php i got 500 error

              – Mahmood
              Aug 19 '12 at 16:21












            • By simply making the trailing slash optional (and still having an all-encompassing capturing subpattern) you would expect this to create a rewrite loop (hence the 500 error). A request for /login/ would rewrite to /login.php to /login.php.php to /login.php.php.php, etc.

              – DocRoot
              May 24 at 21:33

















            • After try this code RewriteEngine on RewriteRule ^([^/]+)/?$ $1.php i got 500 error

              – Mahmood
              Aug 19 '12 at 16:21












            • By simply making the trailing slash optional (and still having an all-encompassing capturing subpattern) you would expect this to create a rewrite loop (hence the 500 error). A request for /login/ would rewrite to /login.php to /login.php.php to /login.php.php.php, etc.

              – DocRoot
              May 24 at 21:33
















            After try this code RewriteEngine on RewriteRule ^([^/]+)/?$ $1.php i got 500 error

            – Mahmood
            Aug 19 '12 at 16:21






            After try this code RewriteEngine on RewriteRule ^([^/]+)/?$ $1.php i got 500 error

            – Mahmood
            Aug 19 '12 at 16:21














            By simply making the trailing slash optional (and still having an all-encompassing capturing subpattern) you would expect this to create a rewrite loop (hence the 500 error). A request for /login/ would rewrite to /login.php to /login.php.php to /login.php.php.php, etc.

            – DocRoot
            May 24 at 21:33





            By simply making the trailing slash optional (and still having an all-encompassing capturing subpattern) you would expect this to create a rewrite loop (hence the 500 error). A request for /login/ would rewrite to /login.php to /login.php.php to /login.php.php.php, etc.

            – DocRoot
            May 24 at 21:33













            0














            This behavior is typical of a conflict with MuiltiViews. You should disable MultiViews at the top of your .htaccess file:



            Options -MultiViews


            This explains why /login without the trailing / successfully serves the file - your RewriteRule is entirely bypassed in this scenario.



            With MultiViews enabled, when requesting /login/, mod_negotiation mocks up a rewrite map and issues an internal subrequest for /login.php before mod_rewrite gets to process the URL. The path-info (trailing /) is added back, to become /login.php/. This is passed back for further processing and matches your overly-generic (^(.*)/$) RewriteRule pattern, resulting in an internal rewrite to /login.php.php/ etc. Depending on your config, this could result in a 403 (as it can result in a malformed request), or a 404 (as you appear to be seeing).



            Disabling MultiViews alone (as mentioned above) would solve this problem. However, you should also consider making your RewriteRule pattern more restictive. For example, to avoid matching URLs that already contain a dot (ie. have a file extension):



            RewriteRule ^([^.]+)/$ $1.php [L]


            Simply making the regex more restrictive may even "fix" the error. However, it would be MultiViews making the internal subrequest, not mod_rewrite (your rule would simply be bypassed).




            as /login/ or /login (with or without the trailing /)




            To allow the rule to work with either /login/ or /login (ie. with or without the trailing slash) you would need to make the trailing slash optional, ie. /?. But you would also need to either make the preceding pattern non-greedy or include the slash in the negated character class in order to avoid capturing the trailing slash in the backreference.



            For example, either:



            RewriteRule ^([^.]+?)/?$ $1.php [L]


            Or,



            RewriteRule ^([^./]+)/?$ $1.php [L]


            But the second rule would only work with URLs that contain a single path segment, whereas the first would work with a URL of the form /foo/bar/login.



            In Summary



            Options -MultiViews

            RewriteEngine On
            RewriteRule ^([^.]+?)/?$ $1.php [L]





            share|improve this answer





























              0














              This behavior is typical of a conflict with MuiltiViews. You should disable MultiViews at the top of your .htaccess file:



              Options -MultiViews


              This explains why /login without the trailing / successfully serves the file - your RewriteRule is entirely bypassed in this scenario.



              With MultiViews enabled, when requesting /login/, mod_negotiation mocks up a rewrite map and issues an internal subrequest for /login.php before mod_rewrite gets to process the URL. The path-info (trailing /) is added back, to become /login.php/. This is passed back for further processing and matches your overly-generic (^(.*)/$) RewriteRule pattern, resulting in an internal rewrite to /login.php.php/ etc. Depending on your config, this could result in a 403 (as it can result in a malformed request), or a 404 (as you appear to be seeing).



              Disabling MultiViews alone (as mentioned above) would solve this problem. However, you should also consider making your RewriteRule pattern more restictive. For example, to avoid matching URLs that already contain a dot (ie. have a file extension):



              RewriteRule ^([^.]+)/$ $1.php [L]


              Simply making the regex more restrictive may even "fix" the error. However, it would be MultiViews making the internal subrequest, not mod_rewrite (your rule would simply be bypassed).




              as /login/ or /login (with or without the trailing /)




              To allow the rule to work with either /login/ or /login (ie. with or without the trailing slash) you would need to make the trailing slash optional, ie. /?. But you would also need to either make the preceding pattern non-greedy or include the slash in the negated character class in order to avoid capturing the trailing slash in the backreference.



              For example, either:



              RewriteRule ^([^.]+?)/?$ $1.php [L]


              Or,



              RewriteRule ^([^./]+)/?$ $1.php [L]


              But the second rule would only work with URLs that contain a single path segment, whereas the first would work with a URL of the form /foo/bar/login.



              In Summary



              Options -MultiViews

              RewriteEngine On
              RewriteRule ^([^.]+?)/?$ $1.php [L]





              share|improve this answer



























                0












                0








                0







                This behavior is typical of a conflict with MuiltiViews. You should disable MultiViews at the top of your .htaccess file:



                Options -MultiViews


                This explains why /login without the trailing / successfully serves the file - your RewriteRule is entirely bypassed in this scenario.



                With MultiViews enabled, when requesting /login/, mod_negotiation mocks up a rewrite map and issues an internal subrequest for /login.php before mod_rewrite gets to process the URL. The path-info (trailing /) is added back, to become /login.php/. This is passed back for further processing and matches your overly-generic (^(.*)/$) RewriteRule pattern, resulting in an internal rewrite to /login.php.php/ etc. Depending on your config, this could result in a 403 (as it can result in a malformed request), or a 404 (as you appear to be seeing).



                Disabling MultiViews alone (as mentioned above) would solve this problem. However, you should also consider making your RewriteRule pattern more restictive. For example, to avoid matching URLs that already contain a dot (ie. have a file extension):



                RewriteRule ^([^.]+)/$ $1.php [L]


                Simply making the regex more restrictive may even "fix" the error. However, it would be MultiViews making the internal subrequest, not mod_rewrite (your rule would simply be bypassed).




                as /login/ or /login (with or without the trailing /)




                To allow the rule to work with either /login/ or /login (ie. with or without the trailing slash) you would need to make the trailing slash optional, ie. /?. But you would also need to either make the preceding pattern non-greedy or include the slash in the negated character class in order to avoid capturing the trailing slash in the backreference.



                For example, either:



                RewriteRule ^([^.]+?)/?$ $1.php [L]


                Or,



                RewriteRule ^([^./]+)/?$ $1.php [L]


                But the second rule would only work with URLs that contain a single path segment, whereas the first would work with a URL of the form /foo/bar/login.



                In Summary



                Options -MultiViews

                RewriteEngine On
                RewriteRule ^([^.]+?)/?$ $1.php [L]





                share|improve this answer















                This behavior is typical of a conflict with MuiltiViews. You should disable MultiViews at the top of your .htaccess file:



                Options -MultiViews


                This explains why /login without the trailing / successfully serves the file - your RewriteRule is entirely bypassed in this scenario.



                With MultiViews enabled, when requesting /login/, mod_negotiation mocks up a rewrite map and issues an internal subrequest for /login.php before mod_rewrite gets to process the URL. The path-info (trailing /) is added back, to become /login.php/. This is passed back for further processing and matches your overly-generic (^(.*)/$) RewriteRule pattern, resulting in an internal rewrite to /login.php.php/ etc. Depending on your config, this could result in a 403 (as it can result in a malformed request), or a 404 (as you appear to be seeing).



                Disabling MultiViews alone (as mentioned above) would solve this problem. However, you should also consider making your RewriteRule pattern more restictive. For example, to avoid matching URLs that already contain a dot (ie. have a file extension):



                RewriteRule ^([^.]+)/$ $1.php [L]


                Simply making the regex more restrictive may even "fix" the error. However, it would be MultiViews making the internal subrequest, not mod_rewrite (your rule would simply be bypassed).




                as /login/ or /login (with or without the trailing /)




                To allow the rule to work with either /login/ or /login (ie. with or without the trailing slash) you would need to make the trailing slash optional, ie. /?. But you would also need to either make the preceding pattern non-greedy or include the slash in the negated character class in order to avoid capturing the trailing slash in the backreference.



                For example, either:



                RewriteRule ^([^.]+?)/?$ $1.php [L]


                Or,



                RewriteRule ^([^./]+)/?$ $1.php [L]


                But the second rule would only work with URLs that contain a single path segment, whereas the first would work with a URL of the form /foo/bar/login.



                In Summary



                Options -MultiViews

                RewriteEngine On
                RewriteRule ^([^.]+?)/?$ $1.php [L]






                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited May 24 at 21:22

























                answered May 24 at 21:07









                DocRootDocRoot

                20519




                20519



























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Server Fault!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fserverfault.com%2fquestions%2f419092%2fhtaccess-rewriterule-results-in-404-response%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Club Baloncesto Breogán Índice Historia | Pavillón | Nome | O Breogán na cultura popular | Xogadores | Adestradores | Presidentes | Palmarés | Historial | Líderes | Notas | Véxase tamén | Menú de navegacióncbbreogan.galCadroGuía oficial da ACB 2009-10, páxina 201Guía oficial ACB 1992, páxina 183. Editorial DB.É de 6.500 espectadores sentados axeitándose á última normativa"Estudiantes Junior, entre as mellores canteiras"o orixinalHemeroteca El Mundo Deportivo, 16 setembro de 1970, páxina 12Historia do BreogánAlfredo Pérez, o último canoneiroHistoria C.B. BreogánHemeroteca de El Mundo DeportivoJimmy Wright, norteamericano do Breogán deixará Lugo por ameazas de morteResultados de Breogán en 1986-87Resultados de Breogán en 1990-91Ficha de Velimir Perasović en acb.comResultados de Breogán en 1994-95Breogán arrasa al Barça. "El Mundo Deportivo", 27 de setembro de 1999, páxina 58CB Breogán - FC BarcelonaA FEB invita a participar nunha nova Liga EuropeaCharlie Bell na prensa estatalMáximos anotadores 2005Tempada 2005-06 : Tódolos Xogadores da Xornada""Non quero pensar nunha man negra, mais pregúntome que está a pasar""o orixinalRaúl López, orgulloso dos xogadores, presume da boa saúde económica do BreogánJulio González confirma que cesa como presidente del BreogánHomenaxe a Lisardo GómezA tempada do rexurdimento celesteEntrevista a Lisardo GómezEl COB dinamita el Pazo para forzar el quinto (69-73)Cafés Candelas, patrocinador del CB Breogán"Suso Lázare, novo presidente do Breogán"o orixinalCafés Candelas Breogán firma el mayor triunfo de la historiaEl Breogán realizará 17 homenajes por su cincuenta aniversario"O Breogán honra ao seu fundador e primeiro presidente"o orixinalMiguel Giao recibiu a homenaxe do PazoHomenaxe aos primeiros gladiadores celestesO home que nos amosa como ver o Breo co corazónTita Franco será homenaxeada polos #50anosdeBreoJulio Vila recibirá unha homenaxe in memoriam polos #50anosdeBreo"O Breogán homenaxeará aos seus aboados máis veteráns"Pechada ovación a «Capi» Sanmartín e Ricardo «Corazón de González»Homenaxe por décadas de informaciónPaco García volve ao Pazo con motivo do 50 aniversario"Resultados y clasificaciones""O Cafés Candelas Breogán, campión da Copa Princesa""O Cafés Candelas Breogán, equipo ACB"C.B. Breogán"Proxecto social"o orixinal"Centros asociados"o orixinalFicha en imdb.comMario Camus trata la recuperación del amor en 'La vieja música', su última película"Páxina web oficial""Club Baloncesto Breogán""C. B. Breogán S.A.D."eehttp://www.fegaba.com

                    Vilaño, A Laracha Índice Patrimonio | Lugares e parroquias | Véxase tamén | Menú de navegación43°14′52″N 8°36′03″O / 43.24775, -8.60070

                    Cegueira Índice Epidemioloxía | Deficiencia visual | Tipos de cegueira | Principais causas de cegueira | Tratamento | Técnicas de adaptación e axudas | Vida dos cegos | Primeiros auxilios | Crenzas respecto das persoas cegas | Crenzas das persoas cegas | O neno deficiente visual | Aspectos psicolóxicos da cegueira | Notas | Véxase tamén | Menú de navegación54.054.154.436928256blindnessDicionario da Real Academia GalegaPortal das Palabras"International Standards: Visual Standards — Aspects and Ranges of Vision Loss with Emphasis on Population Surveys.""Visual impairment and blindness""Presentan un plan para previr a cegueira"o orixinalACCDV Associació Catalana de Cecs i Disminuïts Visuals - PMFTrachoma"Effect of gene therapy on visual function in Leber's congenital amaurosis"1844137110.1056/NEJMoa0802268Cans guía - os mellores amigos dos cegosArquivadoEscola de cans guía para cegos en Mortágua, PortugalArquivado"Tecnología para ciegos y deficientes visuales. Recopilación de recursos gratuitos en la Red""Colorino""‘COL.diesis’, escuchar los sonidos del color""COL.diesis: Transforming Colour into Melody and Implementing the Result in a Colour Sensor Device"o orixinal"Sistema de desarrollo de sinestesia color-sonido para invidentes utilizando un protocolo de audio""Enseñanza táctil - geometría y color. Juegos didácticos para niños ciegos y videntes""Sistema Constanz"L'ocupació laboral dels cecs a l'Estat espanyol està pràcticament equiparada a la de les persones amb visió, entrevista amb Pedro ZuritaONCE (Organización Nacional de Cegos de España)Prevención da cegueiraDescrición de deficiencias visuais (Disc@pnet)Braillín, un boneco atractivo para calquera neno, con ou sen discapacidade, que permite familiarizarse co sistema de escritura e lectura brailleAxudas Técnicas36838ID00897494007150-90057129528256DOID:1432HP:0000618D001766C10.597.751.941.162C97109C0155020