【问题标题】:.htaccess only one RewriteRule is not working.htaccess 只有一个 RewriteRule 不起作用
【发布时间】:2013-11-02 15:48:12
【问题描述】:

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

【问题讨论】:

  • 我在 localhost 服务器中测试了这个重写规则,它确实有效。你的.htaccess 可能有另一部分搞砸了。你能完整地展示给我们看吗?
  • 除了 Guilherme 的评论:你为什么在这里使用 htmlspecialchars?您应该添加一个检查if(realpath('pages/'.$page.'.php') == 'pages/'.$page.'.php') 以拒绝路径遍历,即使index.php?page=../../some-other-php 不可能
  • 谢谢指教,我改了!并添加了 htaccess

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


【解决方案1】:

对所有页面使用一行代码不是更容易吗? 类似的东西

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

【讨论】:

  • 呵呵,不是因为我用的是其他的RewriteRule,还有其他的var!
【解决方案2】:

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

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

【讨论】:

  • 刚刚添加了 htaccess !我试图删除RedirectMatch 并且员工队伍正在工作......但是,我没有看到我的错误......
【解决方案3】:

我相信这是因为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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 2013-06-22
    相关资源
    最近更新 更多