0

我在 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 之后工作!

4

3 回答 3

1

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

RewriteRule ^(.*)\.html$ index.php?page=$1 [L]
于 2013-11-02T17:09:03.060 回答
0

我相信这是因为MultiViews

根据官方手册

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

尝试在您的顶部将其关闭.htaccess

Options +FollowSymLinks -MultiViews
于 2013-11-02T17:41:58.283 回答
0

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

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

于 2013-11-02T16:36:16.727 回答