htaccess和PHP – redirect和漂亮的url

我有一个networking社区,现在正在增长。 我喜欢为我的networking做一个链接改造,然后我需要知道我的情况的最佳解决scheme。

现在我的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?页= 3

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

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

… 等等。

如何在不删除我的domain.com/usernamefunction的情况下制作这些漂亮的url? 你会build议什么解决scheme?

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

如果您要重写的所有网址都是相同的终点,则可以简单地使用:

 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 

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

你真的有这个文件,它是index.php

如果它匹配任何页面和用户等。 然后它会重定向到一个标题位置。

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

只要改变你的规则,以更一般的一个

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

你基本上有两个选择。

  1. 将所有URL路由到中央调度程序(FrontController),并让PHP脚本分析URL并包含正确的脚本
  2. 注意你在.htaccess中的每一个可能的路线(url重写)

我一直使用选项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)

这可以完全用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