htaccess和php - 重定向和漂亮的网址

时间:2012-03-02 09:10:50

标签: php apache .htaccess url

我有一个网络社区,现在它正在增长。我喜欢为我的网站进行链接改造,然后我需要知道我的案例的最佳解决方案。

现在我的htaccess看起来像这样:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/?$ index.php?page=user&username=$1 [L]

您可以链接到 domain.com/username 这样的用户,这很不错。

然后我有不同的页面,如

  • index.php页面=论坛和ID = 1
  • index.php页面= someotherpage和ID = 1&安培; anotherid = 5
  • 的index.php?页=第三

......等等。我希望他们看起来像这样:

  • domain.com/forum/23/title-of-the-thread
  • domain.com/page2/id1/id2

......等等。

如何在不删除domain.com/username功能的情况下制作这些漂亮的网址?你会建议什么解决方案?

我在考虑创建一个检查URL的文件,如果它匹配任何页面,用户等等。然后它将使用标题位置重定向。

4 个答案:

答案 0 :(得分:3)

  

我正考虑创建一个检查URL的文件,

你实际上有那个文件,它是index.php

  

如果它匹配任何页面和用户等。然后它将使用标题位置重定向。

那是错的。 HTTP重定向不会使您的网址看起来“漂亮” 你必须包含适当的文件,而不是重定向到。

只需将您的规则更改为更一般的规则

RewriteRule ^(.*)$ index.php [L,QSA]

答案 1 :(得分:3)

如果您要重写的所有网址都使用相同的终点,您只需使用:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
index.php中的

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

你如何使用请求uri取决于你,你可以使用一个简单的strpos检查:

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

$rules = array(
    '/forum/' => 'forum',
    '/foo/' => 'foo',
    '/' => 'username'
);

foreach($rules as $pattern => $action) {
    if (strpos($url, $pattern) === 0) {
        // use action
        $file = "app/$action.php";
        require $file; 
        exit;
    }
}
// error handling - 404 no route found

答案 2 :(得分:1)

你基本上有两个选择。

  1. 将所有URL路由到中央调度程序(FrontController)并让该PHP脚本分析URL并包含正确的脚本
  2. 请注意.htaccess
  3. 中的每条可能路线(网址重写)

    我一直使用选项1,因为这允许最大的灵活性和最低的mod_rewrite开销。选项2可能类似于:

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^forum/([^/]+)/([^/]+)/?$ index.php?page=forum&id=$1 [L]
    RewriteRule ^otherpage/([^/]+)/([^/]+)/?$ index.php?page=someotherpage&id=$1&anotherid=$21 [L]
    RewriteRule ^page/([^/]+)/?$ index.php?page=$1 [L]
    # …
    RewriteRule ^([^/\.]+)/?$ index.php?page=user&username=$1 [L]
    
    你说

      

    我正在考虑创建一个检查URL的文件,如果是的话   匹配任何页面和用户等。然后它将重定向到   标题位置。

    虽然“创建检查URL的文件”听起来很像选项1,但“使用标题位置重定向”是您可以做的最糟糕的事情。这将导致

    • 客户端的额外HTTP往返,导致页面加载速度变慢
    • “漂亮的网址”不会成功,浏览器会显示您重定向到的网址
    • 失去链接汁(SEO)

答案 3 :(得分:0)

这可以完全用htaccess或php

完成
//First Parameer
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?page=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?page=$1

//Second Parameter 
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)$ index.php?page=$1&username=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/$ index.php?page=$1&username=$2

在这里阅读更多相关信息:
http://net.tutsplus.com/tutorials/other/using-htaccess-files-for-pretty-urls/ http://www.roscripts.com/Pretty_URLs_-_a_guide_to_URL_rewriting-168.html