2013-11-02 2 views
0

У меня есть проблема с только одна страница на RewriteRule HTAccess:.htaccess только один RewriteRule не работает

страница http://www.snes-fr.net/staff.html не работает (404), но все другие являются.

staff.php находится в папке: http://www.snes-fr.net/pages/staff.php

.htaccess линия: RewriteRule ^staff\.html$ index.php?page=staff [L]

но эта ссылка не работает: http://www.snes-fr.net/staff.html это один работает: http://www.snes-fr.net/cgu.html

RewriteRule ^cgu\.html$ index.php?page=cgu [L]

Код, который отображает страницу

$page = @htmlspecialchars($_GET['page'], ENT_QUOTES); 
    if(is_file('pages/'.$page.'.php')) 
     { 
     require('pages/'.$page.'.php'); 
     } 

У вас есть ключ? Спасибо

EDIT: Htaccess:

SetEnv PHP_VER 5_4 
ErrorDocument 404 http://www.snes-fr.net/404.html 
RewriteEngine on 
Options +FollowSymlinks 

SetEnv REGISTER_GLOBALS 1 
SetEnv MAGIC_QUOTES 0 


RewriteCond %{HTTP_REFERER} decerto\.fr [NC] 
RedirectMatch seeother ^/dossier-super-nintendo_([0-9]+)_(.*)\.html$ http://www.snes-fr.net/tests.html 
#REECRITURE 


RewriteRule ^staff\.html$ index.php?page=staff [L] 
RewriteRule ^cgu\.html$ index.php?page=cgu [L] 
RewriteRule ^contact\.html$ index.php?page=contact [L] 
RewriteRule ^404\.html$ index.php?page=404 [L] 
RewriteRule ^index\.html$ index.php [L] 

...

Все, что я работает RewriteRule после!

+1

Я протестировал это правило перезаписи на локальном сервере, и это действительно работает. Вероятно, есть еще одна часть вашего «.htaccess». Можете ли вы показать нам это полностью? –

+1

Кроме комментария Гильерме: почему вы используете htmlspecialchars здесь? Вы должны добавить проверку 'if (realpath ('pages /' .$ page. '. Php') == 'pages /'.$ page.'. Php ')', чтобы отклонить трассировку пути, т.е. make 'index. php? page = ../../some-other-php' невозможно –

+0

Благодарим за совет, я изменил его! И добавил htaccess –

ответ

0

Ваша строка верна, проблема должна исходить из других источников htaccess. Можете ли вы поделиться остальной частью файла, пожалуйста?

Однако будьте осторожны, вы не должны использовать htmlspecialchars для защиты ваших потребностей. Вы можете использовать функцию basename: http://php.net/manual/en/function.basename.php

+0

Просто добавил htaccess! И я попытался удалить «RedirectMatch», и линия персонала работает ... Но я не вижу своей ошибки ... –

1

Не было бы проще использовать одну строку кода для всех страниц? Что-то вроде

RewriteRule ^(.*)\.html$ index.php?page=$1 [L] 
+0

Хе-хе, нет, потому что я использую другой RewriteRule с другим var! –

0

Я считаю, что это из-за MultiViews

По Officla Manual:

Using a 'MultiViews' search, where the server does an implicit filename pattern match and chooses from among the results.

Попробуйте отключить его на верхней части .htaccess:

Options +FollowSymLinks -MultiViews 
Смежные вопросы