我需要一些正确编写.htaccess
文件的帮助。我确实尽我所能,但总是没有按预期工作。我想要实现的是:
favicon.ico
,它会立即获得404,没有异常,没有重写/重定向(我的当前代码仍会重写它,然后返回404),admin.
,请将流量重写为/admin/
文件夹(在网址中保留admin.
),否则重写为www.
www.
,即使是在任何“子文件夹”上(例如:domain.com/en/sub1/sub2/),否则重定向,sl
并重定向
对根目录中的index.php的其他请求(包括lang代码,例如:www.domain.com/en/example/#selection,?a = b不需要发送,我不会使用它) 当前.htaccess
:
Options +FollowSymlinks -Indexes
RewriteEngine on
// this works somewhat (still rewrites 2 times... I can see it in apache log)
RedirectMatch 404 favicon.ico
// this doesn't work at all
Redirect 404 /favicon.ico
RewriteCond %{HTTP_HOST} ^admin\. [NC]
RewriteRule ^(.*)$ /admin/$1 [L]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
# Check if lang. code is provided otherwise select sl
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/(sl|en)/ [NC]
RewriteRule ^(.*)$ /sl/$1 [R,L]
# Add trailing slash if not found
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/ [R,L]
# Process virtual links/directories
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/?$1 [QSA,L]
问题:
admin.domain.com
时,我得到500 Internal Server Error
,favicon.ico
在第一个实例时不会返回404,SOLUTION:
我删除了RedirectMatch
规则并且只使用Redirect 404 /favicon.ico
,但此外我必须添加几乎所有地方RewriteCond %{REQUEST_FILENAME} !favicon.ico
以获得正确的404响应(没有任何重写/重定向)。< / p>
关于admin子域名:我留下完全相同的规则,但我在/ admin文件夹中创建了额外的.htaccess
,用于排除到达那里的流量。
答案 0 :(得分:0)
您的管理员重写过于宽泛,无法循环播放。
RewriteCond %{HTTP_HOST} ^admin\. [NC]
RewriteRule ^(.*)$ /admin/$1 [L]
尝试添加条件RewriteCond %{REQUEST_URI} !^/admin [NC]
以避免循环(如果真实的请求以/admin
开头,它将永远不会匹配。
RewriteCond %{HTTP_HOST} ^admin\. [NC]
RewriteCond %{REQUEST_URI} !^/admin [NC]
RewriteRule ^(.*)$ /admin/$1 [L]
RedirectMatch和Redirect指令都有两个必需参数:正则表达式/路径和重定向URL。状态代码是可选的。从理论上讲,您的规则RedirectMatch 404 favicon.ico
可能会被解释为“如果路径匹配404然后重定向到favicon.ico”。我建议在指令ala:Redirect 404 /favicon.ico /dev/null
中添加一个虚拟URL(不存在)。