[英]Manage slugs with PHP and .htaccess (mod_rewrite)
讓我們調用我的網站:
www.example.com
我有一個像這樣的 PHP 文件:
www.example.com/product.php?id=50
我想通過使用訪問它
www.example.com/product/50
但同樣,非常重要,我有幾個子目錄,比如
www.example.com/subsite/product.php?id=50
www.example.com/subsubsite/product.php?id=50
那必須變成
www.example.com/subsite/product/50
www.example.com/subsubsite/product/50
如何使用 mod_rewrite 使用 PHP 和.htaccess
最好地解決它? 我用其他類似的問題敲了敲頭,但無濟於事。
我似乎找不到完美運行的解決方案,處理所有導入的文件,如 CSS、JS 和 PHP 類。
好的,所以這可能不是完整的答案,但應該可以幫助您找到自己的方式。
您可以使用正則表達式來匹配您想要的路徑模式。 因此,例如,您的 htaccess 可能看起來像...
# Check if module is installed
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Check query for matching pattern and pass id, but also append additional query strings
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\/]+\/)?product\/([0-9]+)$ /$1product.php?id=$2 [L,QSA]
# If not file or directory on server, send to 404.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /404.php [L]
</IfModule>
而它的作用是......
1.將uri與正則表達式匹配
正則表達式: ^([^\/]+\/)?product\/([0-9]+)$
^
- 字符串的開始。([^\/]+\/)?
- 匹配任何目錄(如果存在)並將其存儲以供重用。product\/([0-9]+)
- 您想要的路徑,例如product/50
並存儲數字“id”以供重復使用。$
- 字符串結束。2. 將捕獲的目錄和 id 傳遞給我們的文件
像這樣:/ /$1product.php?id=$2 [L,QSA]
$1
是我們的目錄名稱,包括尾部斜杠,例如subsubsite/
$2
是我們的產品編號,例如50
[L,QSA]
QSA 標志意味着我們可以訪問其他查詢字符串參數,例如/product/50?show=all&updated=1
。 更多關於標志的信息可以在這里找到http://httpd.apache.org/docs/current/rewrite/flags.html#flag_qsa3. 404 不匹配
像這樣:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /404.php [L]
!-f
如果請求不是文件!-d
如果請求不是目錄/404.php
用於顯示 404 錯誤的文件。拿到身份證...
通過以上,您可以在product.php
文件中獲取 ID,如下所示:
$id = (int)$_GET[ 'id' ];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.