【问题标题】:Mod_Rewrite PHP issueMod_Rewrite PHP 问题
【发布时间】:2013-04-05 13:40:27
【问题描述】:

我实际上已经尝试过这里所说的教程:http://net.tutsplus.com/tutorials/other/using-htaccess-files-for-pretty-urls

我尝试使用教程的 PHP 版本。但是,它似乎不起作用。事实上,这对我来说看起来有点不合逻辑。

这是我需要放入 .htaccess 文件的代码:

Options +FollowSymLinks  
RewriteEngine On  

RewriteCond %{SCRIPT_FILENAME} !-d  
RewriteCond %{SCRIPT_FILENAME} !-f  

RewriteRule ^.*$ ./index.php  

正如我测试的那样,这实际上将所有内容重定向到 index.php 文件。所以我已将此代码插入到我的 index.php 文件中:

$request  = $_SERVER['REQUEST_URI']; 

$params     = split("/", $request);  


$safe_pages = array("login");  

if(in_array($params[0], $safe_pages)) {  
echo 'ok'; //insert a file here
} else {  
echo 'not ok'; //header to 403.php

}

这段代码非常简单明了。如果 URI 是 /login,它应该回显:“ok”(在此处插入文件)。

但是,每当我输入:mywebsite.com/login 时,它总是给我 index.php,并显示消息:“不正常”,所以我猜 php 代码应该有问题。

【问题讨论】:

  • 如果您对此教程有任何理解问题,请联系该教程的作者。您还可以在该教程的 cmets 中保留与该教程相关的讨论。
  • 使用print_r($params); 查看代码哪里出错了;可能是[0].
  • 另外,请先解决/回答您之前似乎属于同一主题的问题:Mod_rewrite - Create Clean URLs
  • 没有人能回答我之前的问题。从那以后我也学到了很多,我测试了更多的例子,但似乎没有人适合我。其实没有人能给我一个好的答案...
  • @mario 我已经这样做了,我得到了以下信息:登录

标签: php apache mod-rewrite uri friendly-url


【解决方案1】:

您在 .htaccess 上缺少另一种方法

RewriteEngine On
RewriteBase /

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

【讨论】:

  • 如果获取请求页面的方法是通过REQUEST_URI,您不需要将其重定向到一个命名参数——尽管它是建议的,但正如您所暗示的那样,它不是必需的。 ^^
  • @Radical_Activity 这样做,你会说$request= $_GET['q'];
  • @Jon 嗯它现在确实有效,但我不明白为什么?为什么是q?
  • @Radical_Activity 因为这一行:RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] .* 周围的括号捕获所有内容并将其放入$1,然后由?q=$1 分配。您可以将其更改为您想要的任何内容,例如 ?myVar=$1,然后您可以使用 $_GET['myVar']; 访问它
  • @Radical_Activity 请将您的根目录中的所有内容压缩并通过电子邮件发送给我(我的个人资料中的联系信息)。这样我可以更好地了解问题所在。
【解决方案2】:

这应该支持像'page/item'这样的url

<?php
$request  = $_SERVER['QUERY_STRING']; 

$params     = explode("/", $request);  


$safe_pages = array("login");  

if(in_array($params[0], $safe_pages)) {  
    echo 'ok'; //insert a file here
} else {  
    echo 'not ok'; //header to 403.php
}
?>

这不适用于像“页面/项目”这样的网址 这应该有效:

<?php
$request  = $_SERVER['REQUEST_URI']; 

$params     = explode("/", $request);  


$safe_pages = array("login");  

$last_item = count($params)-1;

if(in_array($params[$last_item], $safe_pages)) {  
    echo 'ok'; //insert a file here
} else {  
    echo 'not ok'; //header to 403.php
}

您正在测试错误的项目。您应该检查数组末尾的字符串“login”。并且函数拆分被贬值,使用explode()

【讨论】:

  • 为什么不先$last_item = end($params); 然后in_array($last_item, $safe_pages)?但是,如果您想扩展并允许 myPage/how-to 等,则整个方法不再有效。 ^^
猜你喜欢
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 2011-02-28
相关资源
最近更新 更多