簡體   English   中英

.htaccess / php url重寫沒有路由?

[英].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&param2=$2&param3=$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM