[英].htaccess / php url rewriting without routing?
所以我一直在尋找一段時間,並且找不到任何具體的關於如何創建漂亮的url / seo / slug url類型系統而不將所有內容發送到index.php或將內容移動到子文件夾中。
基本上我正在制作一個網站,你現在可以去像movie.php這樣的網址?id = #### / show.php?id = ####。 理想情況下,我希望網址是電影/ ####或電影/ id / ####(或者我可以用來抓住正確名稱的名稱下方)等等。
有沒有辦法在沒有單個index.php路由器的情況下完成它,或者我只是要重寫我的所有文件以堅持這種風格?
您可以在.htaccess中創建一個重寫規則,將電影網址路由到movie.php,如下所示:
電影/ 123:
RewriteRule ^movie/(\d+)$ movie.php?id=$1 [L]
電影/ ID / 123:
RewriteRule ^movie/id/(\d+)$ movie.php?id=$1 [L]
電影/冠軍的-電影:
RewriteRule ^movie/(\S+)$ movie.php?slug=$1 [L]
電影/標題/標題 - 的 - 電影:
RewriteRule ^movie/title/(\S+)$ movie.php?slug=$1 [L]
組合電影/ 123 /電影名稱:
RewriteRule ^movie/(\d+)/(\S+)$ movie.php?id=$1&slug=$2 [L]
編輯:添加一個完整的.htaccess示例,需要1個最多2個額外的可選參數,如果網址不是電影,則返回index.php。
Options -Indexes
IndexIgnore */*
Options FollowSymLinks
AddDefaultCharset utf-8
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^movie/([^/]+)/?([^/]*)/?([^/]*)$ movie.php?param1=$1¶m2=$2¶m3=$3 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . index.php [L]
</IfModule>
^
從頭開始匹配
$
匹配到結束
?
0或1次出現
+
發生一次或多次
*
出現0次或更多次
如果url規則不匹配且文件不存在,那么它會將url路由到index.php,但如果你不想這樣,你可以刪除最后一個部分。
是的,假設您的URL結構遵循相對一致的模式,您絕對可以使用.htaccess文件和mod_rewrite(不需要index.php文件,通常稱為前端控制器)。
這是一個非常簡單的例子:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)/(.*)$ $1.php?id=$2 [NC,L]
這會獲取http://example.com/movie/3等傳入的網址,並執行透明/內部重寫(因此用戶看不到網址更改)到http://example.com/movie.php?id = 3 。
當然,這個例子可以擴展到處理更多的參數等,但希望這能讓你開始走上正確的道路。 我強烈建議您閱讀mod_rewrite文檔以獲取更多詳細信息: http : //httpd.apache.org/docs/2.4/mod/mod_rewrite.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.