簡體   English   中英

.htaccess,多個域,非www,強制尾部斜杠,全部重定向到PHP腳本

[英].htaccess, multiple domains, non-www, force trailing slash, all redirect to PHP script

一些利他的htaccess向導先生面臨的挑戰:

我一直在為我正在工作的新站點下載htaccess文件,但無法破解。 我讓每個部分都獨立工作-但無法讓他們一起工作。 我正在基於PHP REQUEST_URI生成站點。 多個域指向同一目錄,因此它必須對多個域起作用。 我正在努力實現:

  1. 指向同一目錄的多個域,
  2. 強制非www,
  3. 強制尾部斜杠不擴展,並且
  4. 將所有不存在的內容重定向到特定腳本

實質上:

http://www.example.com/dog/cat- > 301顯示為-> http://example.com/dog/cat/- >,但無提示地重定向至-> http://example.com/script。 PHP

要么

http://www.example.com/dog/cat/pig/bird/walrus- > 301顯示為-> http://example.com/dog/cat/pig/bird/walrus/- >靜默重定向至- > http://example.com/script.php

要么

http://www.example.com/dog/cat.html- > 301顯示為-> http://example.com/dog/cat/- >靜默重定向到-> http://example.com/script .PHP

要么

http://www.example.com/dog.php- > 301顯示為-> http://example.com/dog/- >靜默重定向到http://example.com/script.php

到目前為止,我已經處理了以下代碼片段(從內存中原諒我):

非www:

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

帶尾斜杠:

RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [L,R=301]

所有腳本都不存在:

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^.*/$ ./script.php [L]

我遇到了某些特定部分根本無法正常工作,遞歸效果等問題。我不喜歡尋求幫助,我已經盡力做好了功課,但我無法弄清楚這一點。

我在這里發現了類似的問題,例如:

htaccess添加結尾斜杠並使用干凈的URL強制www

任何幫助是極大的贊賞!

更新:

因此,我繼續擺弄.htaccess文件。 我在問題下方添加了一條注釋,以表示我在使用Firefox的“精彩”地址欄搜索功能時遇到了麻煩,該功能將域名重定向為在非www和非結尾斜杠時進行搜索。 因此,我將我的方案更改為仍然保持一致(防止重復),但做了相反的事情:強制使用www和斜杠。

以下代碼產生的結果與我正在尋找的結果接近:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /

#Redirect Forcing trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .*[^/]$ /$0/ [L,R=301]

#Redirect non-www to www
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

#Redirect to script
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ script.php [L]

我仍然需要擴展名不存在的文件,即:

www.example.com/cats.html-> www.example.com/cats/

任何建議都將意味着世界...

您的帶尾斜杠規則存在問題:

RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [L,R=301]

您將再次匹配相同的結尾斜杠,並在重定向中添加另一個斜杠。 您的目標需要更改為:

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

這肯定會導致重定向循環。 否則,可能唯一的其他問題是使用%{SCRIPT_FILENAME}而不是%{REQUEST_FILENAME} 在大多數情況下,它沒有什么不同,但是第二個可能正是您真正想要的:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*/$ ./script.php [L]

只要這兩個重定向規則位於路由到script.php規則之前 ,這些規則就不會相互沖突。 在香草apache安裝上的空白htaccess文件中,它工作正常。

暫無
暫無

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

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