2010-09-26 118 views
1

我想设置一个默认的变量自带一个URLPHP:htacess默认变量

的最后一个查询的.htaccess文件重定向URL,如下所示:

http://www.server.com/folder/subfolder/index.php?page="some-page-name" 

显示的URL

http://www.server.com/folder/some-page-name 


如果页面名称未设置,如:

http://www.server.com/folder/ 

默认为“索引”。我可以使用PHP函数header("location:url"),但如果URL不是我想要的,那么它会在最后显示“索引”部分。



htacess内容

Options -Indexes 

    <IfModule mod_rewrite.c> 
    RewriteEngine On 
    #RewriteCond %{REQUEST_URI} !^(/index\.php|/img|/js|/css|/robots\.txt|/favicon\.ico) 
    RewriteBase /folder/ 
    RewriteRule ^index\.php$ - [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_URI} !^.*\.css.*$ [NC] 
    RewriteRule ^(.*)$ subfolder/index.php/?page=$1 [L] 
    </IfModule> 

    <IfModule mod_rewrite.c> 
    ErrorDocument 404 /error.html 
    ErrorDocument 403 /error.html 
    </IfModule> 
+0

顺便说一句,我真的在您的'.htaccess'中看到'?pageID =',而不是你在问题中提到的'?page ='。 – Lekensteyn 2010-09-27 16:30:17

+0

@Lekensteyn,我的不好?page =。 – Zebra 2010-09-28 09:33:44

回答

1

你不必重定向到的index.php。您可以使用类似:

header('Location: /folder/front-page'); 

如果你只是想http://example.com/folder/显示你的索引页,你可以用你的PHP脚本如下:

$requested_page = filter_input(INPUT_GET, 'pageID'); 
$allowed_pages = array('some-page', 'some-page-name'); 
if($requested_page == ''){ 
    // display your index page as ?pageID is not set or empty 
} 
elseif(in_array($requested_page, $allowed_pages)){ 
    // display $requested_page 
} 
else{ 
    // display a 404 Not Found error 
} 
+0

为了这个工作,他必须做'header('Location:/ folder/index');'作为“首页”不是他的默认页面,“索引”是,并且他特别说“那会在结尾处显示“索引”部分,如果URL ...我不'想要“。 – Josh 2010-09-26 16:10:57

+0

那时我误解了他的问题,我以为他在谈论'/index.php?pageID=首页'。重新回答我的答案。 – Lekensteyn 2010-09-27 16:29:05

+0

非常感谢你! – Zebra 2010-09-28 09:36:15

-1

你的问题太长,没有阅读,但是如果你只是想在你的.htaccess文件中设置一个变量并将它传递给PHP,那就很容易做到这一点 -

在.htaccess文件(http://httpd.apache .ORG /做CS/2.0/MOD/mod_env.html#SETENV):

SetEnv default_url http://my.url/goes/here 

在你的PHP脚本(http://www.php.net/manual/en/reserved.variables.environment.php):

header('Location: '. $_ENV['default_url']); 

或者,如果你有ErrorDocument处理,你也许可以简单地发送状态代码以及(见第三个选项header()http://us.php.net/manual/en/function.header.php)。

+1

我不认为这就是他要求的......也许读他的问题会有帮助吗? – Josh 2010-09-26 16:08:42

1

尝试在你的PHP文件中的代码:

$pageID = 'index'; 

if(isset($_REQUEST['pageID']) && !empty($_REQUEST['pageID'])) 
    $pageID = get_magic_quotes_gpc() ? stripslashes($_REQUEST['pageID']) : $_REQUEST['pageID']; 

// Your code should now use the $pageID variable... 

这将完成设置$pageID为“指数”的默认值。然后,如果mod_rewrite提供了不同的PageID,$pageID将下注到该值。你的代码应该使用$pageID的值。

+0

谢谢,非常感谢! – Zebra 2010-09-28 09:37:52