[英]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.