您將需要幾件事情:
設置一個.htaccess重定向所有請求你的主文件,它會處理這一切,是這樣的:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
以上將重定向不存在的文件和文件夾的所有請求index.php
現在您要處理URL路徑,以便您可以使用PHP變量$_SERVER['REQUEST_URI']
正如你所說的。
從那裏是相當多的分析它的結果,以提取所需的信息,你可以使用的功能parse_url
或pathinfo
或explode
一個,這樣做。
使用parse_url
這大概就是這樣做的最指示方式:
$s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "https" : "http";
$url = $s . '://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
var_dump(parse_url($url));
輸出:
["scheme"] => string(4) "http"
["host"] => string(10) "domain.com"
["path"] => string(36) "/health/2013/08/25/some-random-title"
["query"] => string(17) "with=query-string"
所以parse_url
可以很容易打破當前的URL,你可以看到。
例如使用pathinfo
:
$path_parts = pathinfo($_SERVER['REQUEST_URI']);
$path_parts['dirname']
將返回/health/2013/08/25/
$path_parts['basename']
將返回some-random-title
,如果它有一個擴展,它將返回some-random-title.html
$path_parts['extension']
將返回空,如果有它將返回的延期.html
$path_parts['filename']
將返回some-random-title
,如果它有一個擴展,它將返回some-random-title.html
使用爆炸這樣的事情:
$parts = explode('/', $path);
foreach ($parts as $part)
echo $part, "\n";
輸出:
health
2013
08
25
some-random-title.php
當然這些只是例子你如何閱讀它。
你也可以使用的.htaccess做出的,而不是從一個文件處理的一切,例如具體的規則:
RewriteRule ^([^/]+)/([0-9]+)/([0-9]+)/([0-9]+)/([^/]+)/?$ blog.php?category=$1&date=$2-$3-$4&title=$5 [L]
基本上上面會打破URL路徑,並在內部重定向到文件博客。使用合適的參數PHP的,所以使用URL樣本會重定向到:
http://www.mysite.com/blog.php?category=health&date=2013-08-25&title=some-random-title
但是客戶端瀏覽器的URL將保持不變:
http://www.mysite.com/health/2013/08/25/some-random-title
也有像我曾提到早期可能出現得心應手這個例如parse_url
,pathinfo
等功能,服務器變量,等...
完美,謝謝!我現在就試試這個。 –
太棒了!奇蹟般有效! –
@MartinE。給它另一個閱讀有更多的內容,這可能是有趣的更新。 – Prix