簡體   English   中英

Apache mod_rewrite 頁面前的查詢字符串並刪除擴展

[英]Apache mod_rewrite query string before page and remove extention

我已經搜索了 web 來尋找我的 mod_rewrite 問題的答案,我覺得我已經無計可施了。 我會有這樣的 URL: http://www.website.com/dashboard.php?username=stackoverflow 這個 url 不是最漂亮的。 所以我的目標是在這里做一些事情......

  1. 消除 php 文件的擴展名(到目前為止,我已經能夠使用下面顯示的代碼執行此操作,但我不知道它是否會根據我需要做的其他事情保留下來)
  2. 消除“www”前綴
  3. 直接在“.com/”之后移動用戶名查詢字符串(僅當它是“用戶名”時,我不想匹配“id”之類的)
  4. 在查詢字符串后移動 php 文件名(不帶擴展名)。

最終的 URL 應該如下所示: http://website.com/stackoverflow/dashboard或者http://website.com/stackoverflow/profile

我現在擁有的消除文件擴展名的代碼是這樣的:

Options +FollowSymLinks
RewriteEngine On
RewriteBase / 

# remove .php ONLY if requested directly
RewriteCond %{THE_REQUEST} (\.php\sHTTP/1)
RewriteRule ^(.+)\.php$ /$1 [R=301,L,QSA]

# remove trailing slash ONLY if it is not an existing folder
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

# rewrite to FILENAME.php if such file does exist and is not a folder
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ /$1.php [L,QSA]

遺憾的是,這只能解決我的一個問題,在查看之后,我覺得會有更好的方法來做到這一點......

(1, 3, 4) 據我了解,您想使用漂亮的 URL,但有 PHP 個頁面支持。 所以它應該是這樣的:

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(\w+)/profile$ /dashboard.php?username=$1 [L]

它將使http://website.com/stackoverflow/profile工作為http://www.website.com/dashboard.php?username=stackoverflow

(2) # 用301將www.site.com重定向到site.com

    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

暫無
暫無

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

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