簡體   English   中英

/file.php到/ file /試用

[英]/file.php to /file/ try out

我想將我的name.php文件重定向/重寫到/ name /我找到了另一個主題的解決方案(http://stackoverflow.com/questions/5527789/htaccess-rewrite-within-directory-hide-php-extension-and -force尾隨斜線)

雖然,我想自己學習並從頭開始。 我首先使用這個,例如.com / test / show .com / test.php的內容:

 RewriteEngine On
 RewriteRule ^(.*)/$ $1.php

然后我嘗試了以下內容,將.com / test.php重定向到.com / test /:

 RewriteEngine On
 RewriteRule ^(.*)\.php$ http://www.mydomain.info/$1/ [R=301]

所以,兩者都是靠自己工作的。 但是當我將它們組合起來時,即使我向它添加[L],也會出現循環錯誤,這應該意味着規則應該只使用一次。 所以這不起作用:

 RewriteEngine On
 RewriteRule ^(.*)/$ $1.php [L]
 RewriteRule ^(.*)\.php$ http://www.mydomain.info/$1/ [L,R=301]

我可能犯了一些愚蠢的錯誤,但對我來說似乎有道理......希望有人可以指出我的錯誤。 謝謝。

因為你有一個R=301的外部重定向,所以添加L對你來說沒有多大幫助,因為重定向將作為一個全新的請求返回到服務器 - 它再次匹配你的第一個重寫規則。

相反,你需要這樣的東西:

RewriteCond %{THE_REQUEST} ^\w+\ /(.*)\.php\ HTTP/
RewriteRule ^ /%1/ [R=301]

RewriteRule ^(.*)/$ $1.php

請注意, THE_REQUEST匹配原始請求的整行,例如GET /index.php HTTP/1.1 即使%{REQUEST_URI}被重寫為.php作為第二個規則的一部分(它將在內部子請求中匹配), %{THE_REQUEST}永遠不會被重寫,這將確保重寫為.php的URL不會在子請求上匹配並導致另一個重定向發送回客戶端。

從第一條規則中刪除L-flag。 這將停止“執行”,第二條規則將不會被使用。 在第二個規則你應該保持L標志,因為它是最后一個。

暫無
暫無

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

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