簡體   English   中英

mod_rewrite重寫基礎

[英]mod_rewrite rewriting base

我正在一個網站上工作,我想用mod_rewrite來重寫網址

www.example.com/index.php?p=MYPAGE - > www.example.com/MYPAGE www.example.com/index.php?p=user?u=MYUSER - > www.example.com/user / MYUSER www.example.com/index.php?p=group?g=MYGROUP - > www.example.com/group/MYGROUP

到目前為止,我已經添加了這些規則。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?p=$1
RewriteRule ^user/(.+)$ index.php?p=user&u=$1

但我面臨一個問題。 如果我訪問www.example.com/single-page一切都很好。 然后,如果我訪問www.example.com/user/SMTHING,我沒有達到我想要的。 我嘗試過使用C和L標志,沒有任何成功。

有任何想法嗎?

謝謝

你有三個問題。 首先,您的條件僅適用於它們之后的第一條規則,因此您仍將重寫合法文件請求。 此外,您需要使用[L] ast標志以及重新排序您的規則。 把它們放在一起:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+)$ $1                               [L]

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+)$ $1                               [L]

RewriteRule ^user/(.+)$ index.php?p=user&u=$1       [L]
RewriteRule ^(.+)$ index.php?p=$1

沒有答案可能看起來像我的,所以這里是:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^user/([a-zA-Z0-9-]+)$ /index.php?p=user&u=$1 [QSA,L]
RewriteRule ^group/([a-zA-Z0-9-]+)$ /index.php?p=group&g=$1 [QSA,L]
RewriteRule ^([a-zA-Z0-9-]+)$ /index.php?p=$1 [QSA,L]

我很確定它有效(或非常接近你想要的)。 請告訴我它是否有效......

順便說一句,如何更好的東西:

RewriteRule ^(user|group)/([a-zA-Z0-9-]+)$ /index.php?type=$1&val=$2 [QSA,L]

所以在你的GET中你會有“type = user”或“type = group”和“val = the value”。 有點概括的東西。

你會試試這個可能有用嗎?

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^user/(.+)$ index.php?p=user&u=$1
RewriteRule ^(.+)$ index.php?p=$1

重寫規則的順序非常重要。

試試這個,它會起作用:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([^\/]+)$ index.php?p=$1
RewriteRule ^([^\/])([^\/]+)\/([^\.]+)$ index.php?p=$1$2&$1=$3

暫無
暫無

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

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