![](/img/trans.png)
[英]6 .htaccess Rewrites: Remove index.html, Remove .html, Force non-www, Force Trailing Slash
[英].htaccess, multiple domains, non-www, force trailing slash, all redirect to PHP script
一些利他的htaccess向導先生面臨的挑戰:
我一直在為我正在工作的新站點下載htaccess文件,但無法破解。 我讓每個部分都獨立工作-但無法讓他們一起工作。 我正在基於PHP REQUEST_URI生成站點。 多個域指向同一目錄,因此它必須對多個域起作用。 我正在努力實現:
實質上:
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文件。 我在問題下方添加了一條注釋,以表示我在使用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.