Autor Zpráva
cs.web
Profil
Dobrý den,
měl bych jeden takový problém.

Na svém webovém serveru bych chtěl používat přepis adres na hezké URL. (Zobrazovat tedy adresu bez koncovek souborů)
Přepis na adresu s www funguje, ale na adresy bez koncovek souborů už ne.
Mod_rewrite je na serveru povolen.

RewriteEngine On

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

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

Předem děkuji za případnou odpověď.
Davex
Profil
Viz Řešení některých častějších problémů (FAQ) » Stránky s adresou bez přípony.
cs.web
Profil
Díky.
Tam už jsem byl a tato pravidla na serverch u webhostingu normálně fungují.
Na tom vlastním serveru však ne.
Předpokládám tedy, že problém bude asi v konfiguraci serveru.
První pravidlo funguje a druhé už ne.
Na serverch webhostingu fungují oba.

V .htaccess je to přesně jako jsem uvedl zde.
ForestCZE
Profil
.htaccess

RewriteEngine On
RewriteBase /
Options -Indexes
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule ^(.*)$ /index.php?stranka=$1 [L,PT]

mujweb.cz/neco/dalsiho

index.php

<?php
$url = $_GET["stranka"];
$link = explode("/", $url);

if($link[0] == "neco"){
...
}

if($link[1] == "dalsiho"){
...
}
?>
cs.web
Profil
ForestCZE:
Díky.
Nad tímhle řešením jsem taky uvažoval, ale nejraději bych to chtěl udělat přes .htaccess.
Davex
Profil
cs.web:
První pravidlo funguje a druhé už ne.
Jak se to nefungování projevuje? Zobrazuje se nějaká chyba?
cs.web
Profil
Projevuje se to tak, že se normálně zobrazí 404.
Když se opět zadá adresa i s .php, soubor normálně najede.
Adresář se stejným názvem neexistuje.

Přesná kopie stránek i se stejným .htaccess na serveru webhostingu funguje.
Na vlastním serveru funguje vše až na podstrčení souboru na adresu bez .php.
Davex
Profil
U té chyby 404 by měl webserver vypsat adresu na kterou se snaží přistupovat - ta samostatně funguje? Nepřepisuješ náhodou do jiného adresáře než jsou PHP skripty?
cs.web
Profil
Adresa se zobrazuje normálně ve tvaru, který jsem napsal.
Zadávám: www.example.cz/stranka (Nefunguje - 404)
Snažím se dostat: www.example.cz/stranka.php (Funguje - 200)

Zjistil jsem však zajímavou věc.
Ono to funguje na všechny soubory kromě php. (Př: JS, CSS, PNG, ZIP, RAR)
Soubor www.example.cz/styly.css se tedy zobrazuje i na adrese www.example.cz/styly, což opravdu nechápu.

--- EDIT ---
Tak právě jsem zjistil, že se to děje i bez souboru .htaccess a pravidla v něm.
Všechny soubory kromě .php jsou přístupné přes adresu bez koncovky a to i po vypnutí mod_rewrite na serveru.

Tak toto už naprosto nechápu.
Davex
Profil
cs.web:
Zadávám: www.example.cz/stranka (Nefunguje - 404)
Opravdu je ta stránka v kořeni webu? Není náhodou ještě v nějakém adresáři - např. www.example.cz/adresar/stranka? Pokud není, tak si zapni RewriteLog a podívej se, co se jak přepisuje.

Pokud přejmenuji soubor stranka.php na stranka.html, je přístupný přes adresu www.example.cz/stranka.
Příčina tohoto chování je popsána ve výše zmíněném FAQ a s přepisovacími pravidly mod_rewrite nesouvisí.
cs.web
Profil
Davex:
Momentálně mě ale nejvíce znepokojuje to, že i při vypnutém mod_rewrite na serveru jsou všechny soubory kromě .php přístupné bez koncovky.
Stránka je v kořeni webu virtualhostu: /var/www/example.cz
Hlavní stránka serveru je v: /var/www/

Hlavní stránka však má v htaccess nastavené jen chybové stránky.
Kajman
Profil
cs.web:
A dočetl jste odkaz z [#2] až do konce, tedy i poznámku o mod_negotiation?
cs.web
Profil
Kajman:
Tak to se opravdu omlouvám.
Skutečně jsem měl dojem, že jsem článek přečetl celý.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: