htaccess从不同的页面重写url

时间:2013-02-12 21:13:30

标签: php .htaccess

我在htaccess文件中创建..来自不同页面的重写URL

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?username=$1 [QSA]    
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?username=$1 [QSA]   

它的工作正常......

现在我需要添加更多作为Facebook

你可以把facebook.com/username

是:facebook.com/profile.php?username =

&安培;你可以把facebook.com/pagename 这是:facebook.com/pages.php?username =

并且工作正常

来自不同页面的

..

我需要这样做..

任何帮助?!

RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?username=$1 [QSA]    
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?username=$1 [QSA]   

RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?username=$1 [QSA]  
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?username=$1 [QSA] 

1 个答案:

答案 0 :(得分:1)

你的正则表达式模式匹配相同,所以你需要一些东西来区分页面和人(或重定向到profile.php与index.php)。

您可以通过以下两种方式之一完成此任务。首先,你可以全部转到一个页面,我们称之为redirect.php。在此页面上,您可以检查ID值,然后重定向。所以喜欢:

    RewriteRule ^([a-zA-Z0-9_-]+)/?$ redirect.php?id=$1

在redirect.php中,您抓取$_GET['id']并对其进行一些查询以确定它是页面还是人物,然后使用以下内容重定向:

    header("Location: profile.php?username=".$_GET['id']);

如果您严格查找与Facebook相关的内容,则可以使用图形API而不是数据库来确定其是否为页面或人员ID。 (不确定它是否可以存在 - 但我认为不是。)

如果您没有数据库或数据源来确定其是否是某个页面或人员,那么您需要在URL字符串中添加一些内容以确定,例如/ pages / {pageid},然后您可以将您的规则重写为:

    RewriteRule pages/([a-zA-Z0-9_-]+)/?$ index.php?username=$1  # for pages
    RewriteRule ^([a-zA-Z0-9_-]+)/?$ profile.php?username=$1  # for people

如果您无法在网址中使用某些内容并且无法通过数据库访问它,那么您运气不好,因为您遇到了两种相同的模式。