.htaccess只有一个RewriteRule不起作用

时间:2013-11-02 15:48:12

标签: php .htaccess mod-rewrite http-status-code-404

我在RewriteRule htaccess上的只有一个页面遇到问题:

页面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');
       }

你有什么线索吗?谢谢

编辑: 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!

3 个答案:

答案 0 :(得分:1)

对所有页面使用一行代码会不会更容易? 像

这样的东西
RewriteRule ^(.*)\.html$ index.php?page=$1 [L]

答案 1 :(得分:0)

你的路线是正确的,问题必须来自htaccess的其他地方。 你可以分享文件的其余部分吗?

但是,请注意,不要使用htmlspecialchars来保护您的要求。 您可以使用函数basename:http://php.net/manual/en/function.basename.php

答案 2 :(得分: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