簡體   English   中英

如何使用apache mod rewrite重寫URL和重定向?

[英]How to rewrite url and redirect with apache mod rewrite?

我有網址:

ipaddress / panelname / main / index.php

如何將其重建為

ipaddress / center / index.php

當然,我們可以看到其他頁面,不僅是index.php,而且可以永久看到url中的此文件夾。

我試圖在.htaccess中做到這一點:

RewriteEngine on
RewriteRule ^center/([^/]+)/?$ panelname/main/$1 [L]
RewriteRule ^/panelname(.*)$ /center$1 [QSA,L,R=301,NC]
Redirect 301 ^/panelname(.*)$ /center$1

但我看不到從panelname重定向到中心。 但是如果我輸入center一切都很好(但是我不保證,通過我的htaccess或我在文件系統中創建的symlink可以正常工作)

如何將所有內容重寫為另一個鏈接,以及如何查看從舊鏈接重定向到我的新鏈接? 謝謝。

目錄上下文(.htaccess是)中的RewriteRule永遠不會以斜杠開頭,因為公共前綴首先從匹配的部分中刪除。

Redirect不匹配字符串,而不匹配正則表達式。 適用於正則表達式的變量是RedirectMatch 兩者都只能用於絕對URL(以斜杠開頭的URL)。

您要么必須執行以下操作:

RewriteRule ^panelname(.*)$ /center$1 [R,L]

要么:

RedirectMatch 302 ^/panelname(.*)$ /center$1

測試完所有功能后,將[R]更改為[R=301] 如果選擇第二個選項,則在測試一切正常后才將302更改為301。

如果要向訪問者顯示/center/index.php並保持從舊URL到該URL的重定向,則將需要一個重定向和一個重寫規則(您已經擁有)。

RewriteEngine on

# external redirect from old URL to new one
RewriteCond %{THE_REQUEST} /panelname/main/(\S+) [NC]
RewriteRule ^ /center/%1 [R=302,L]

# internal forward from new URL to actual one
RewriteRule ^center/([^/]+)/?$ panelname/main/$1 [L]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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