对一些无私的超级 htaccess 巫师绅士的挑战:
我一直在为我正在开发的一个新站点删除一个 htaccess 文件,但无法破解它。我让每个部分独立工作 - 但不能让他们一起工作。我正在基于 PHP REQUEST_URI 生成站点。多个域指向同一个目录,因此它必须适用于多个域。我正在努力完成:
- 多个域指向同一个目录,
- 强制非 www,
- 强制斜杠没有扩展,和
- 将所有不存在的内容重定向到特定脚本
本质上:
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/
任何建议都意味着世界...