将url中的变量重定向到apache中的特定页面

时间:2015-11-07 11:12:13

标签: php regex apache

我正在尝试将用户重定向到个人资料页面(profile.php)

这是链接

  

https://dev-website.com/name_of_user

该文件位于

~/profile.php

如果我运行此链接,则可以使用

https://dev-website.com/profile.php?username=name_of_user

这是我的剧本

Options +FollowSymlinks
RewriteEngine On

Options -Indexes

RewriteCond %{REQUEST_URI} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !index.html$
RewriteRule ^(.+[^/])(.*)$ https://dev-website.com/profile.php?username=$1 [L]

我收到此错误

  

未找到

     

在此服务器上找不到请求的URL / name_of_user

     

Apache / 2.4.7(Ubuntu)服务器,位于dev-website.com端口443

请帮助

3 个答案:

答案 0 :(得分:0)

更改 .htaccess:

Options +FollowSymlinks
RewriteEngine On

Options -Indexes

RewriteCond %{REQUEST_URI} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !index.html$
RewriteRule ^(.+[^/])(.*)$ https://dev-website.com/profile.php [L] # <- change

profile.php 中,获取username,并执行以下用户特定任务:

<?php 

  if( isset($_GET['username'] ) {
     $username = $_GET['username'];
     // do whatever you want as user specific staff here
  }

所以,链接:https://dev-website.com/profile.php?username=name_of_user完美地工作。

答案 1 :(得分:0)

如果你想在认证后这样做,你应该这样做:

if(isValidateUser($username, $pass)){
   header('HTTP/1.0 301');
   header('Location: https://dev-website.com/profile.php?username='.$username));
   die();
}

但如果您坚持使用.htaccess,请在适当的条件后尝试使用此规则:

RewriteRule ^(.+[^/])(.*)$ /profile.php?username=$1 [R=301,L]

答案 2 :(得分:0)

Options -Indexes -MultiViews +FollowSymlinks

RewriteEngine On

RewriteCond %{REQUEST_URI} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !index.html$

RewriteRule ^(.+[^/])(.*)$ profile.php?username=$1 [L,NC,QSA]