![](/img/trans.png)
[英]How to redirect query string to subdirectory based url using .htaccess?
[英]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.