1

我在 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] 
4

1 回答 1

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

如果你不能在你的 URL 中使用某些东西并且没有办法通过数据库访问它,那么你就不走运了,因为你遇到了两个相同的模式。

于 2013-02-12T21:25:07.590 回答