簡體   English   中英

如何使用htaccess屏蔽不帶斜杠的子目錄URL,並且不附加內部查詢字符串?

[英]How do I mask a subdirectory URL without a trailing slash using htaccess and not have the internal query string appended?

精氨酸! 所以,我有一個像這樣的URL:

mysite.com/foo-bar

要么

mysite.com/foo-bar/

當用戶請求此地址時,我不想更改它,但是在內部(看不見),我希望該地址實際是該地址:

main.php?page=foo-bar

多年以來,我一直在使用以下htaccess行:

RewriteRule ^([a-z0-9\-]+)\/{0,1}$ main.php?page=$1 [QSA,NC,L]

而且效果很好。 但是現在,當我(1)嘗試使用子目錄時:

RewriteRule ^sub\/([a-z0-9\-]+)\/{0,1}$ main.php?page=$1 [QSA,NC,L]

並且(2)不要添加斜杠,它會突然附加“內部”查詢字符串。

所以這:

mysite.com/sub/foo-bar/

工作正常。 但是這個:

mysite.com/sub/foo-bar

仍在內部運行,但URL重定向至此:

mysite.com/sub/foo-bar/?page=foo-bar

我嘗試刪除[QSA],但這沒什么不同。 此外,我需要它,因為我希望將用戶傳遞的任何額外的變量添加到我的變量中。 例如:

mysite.com/sub/foo-bar?uservar=42

不應更改為查看器,但內部應為:

main.php?page=foo-bar&uservar=42

我已經花了幾個小時閱讀有關類似問題的Apache文檔和StackOverflow帖子,但是沒有一種解決方案有效。 如果在子目錄請求中未添加斜杠,則會添加斜杠,並向查看器顯示內部變量。 請幫忙!

發生這種情況的原因是mod_dir在實際目錄的URI中添加了斜杠。 要解決此問題,您可以使用:

DirectorySlash Off
RewriteEngine On

# add a trailing slash to directories
RewriteCond %{DOCUMENT_ROOT}/$1 -d
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,R=302]

RewriteRule ^sub/([a-z0-9-]+)/?$ main.php?page=$1 [QSA,NC,L]

暫無
暫無

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

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